zoukankan      html  css  js  c++  java
  • node 上传文件 路径 重命名等问题

    最近在学习node,想做一个简单的网站。首先想到的是上传文件的功能,查了下,发现有一个formidable模块,操作方便,便拿来尝试了一下,结果很纠结。

    下载安装的就不用说了,用npm即可。说一下,自己遇到的问题吧,mark一下,防止再犯。

    当然,使用的例子也是最广泛的,即官网上的那个,懒,就不在此贴上了。。。。还有,我用的是html是jade

    首先是没有给上传文件的input标签添加name属性,导致它的files域为空,从正常的结果来看,files是以file的name为对象的集合。

    还有需要注意的是res.writeHead(200,{'content-type':'text/plain;charset=utf-8'});,否则返回中文等显示乱码,切记中中间的是分号(绿色),html菜鸟飘过。。。

    还有就是上传路径的指定。如果没有指定路径的话,文件会被上传到电脑默认的临时文件夹下面(我的在c:/user/admin/appdata/local/temp下)。起初,我设定的路径入下:

      form.uploadDir = "/temp";

    这个temp是需要先在项目中创建好的。

    PS:名字起得太有争议了,和系统文件夹名字重名了,不过也让我了解多了些问题本质,(^o^)/~

    在上图可以看到它的path显示,在我的电脑上找,原来是被存放到系统盘C:TEMP。本来认为的是文件会被存入到项目根目录下的temp文件夹中,却忽略了/temp是根目录的表示。。。于是,添加一个"."来表示当前目录,也就是项目的路径。form.uploadDir = "./temp";果然,在项目的temp下,真的出现了上传文件,可惜名字无法辨别。。。虽然path显示的和以前的差不多,不过此temp非彼temp。。。我们可以看到,前者前面带有“\”表示根目录即绝对路径,后者以“temp”开始,表示相对路径。

    下面便是想改个名字,以方便以后对文件进行操作。

    改名字的话就要用到fs模块了,对文件进行操作嘛。

    var fs = require('fs')

    在相应的函数里面加上下面这句:

    fs.renameSync(files.upload.path,"change.txt");

    首先,我是不清楚它的原理,大概的意思是猜它将重命名上传路径上文件的名字,我想将文件名称改为change.txt。结果呢,文件是被重命名了,不过它却出现在项目的根目录下面,不明白。。。

    返回的信息也是显示如上图的信息,path还是temp加上一长串,这表示,我错了。

    再次尝试,fs.renameSync(files.upload.path,"./temp/change.txt");其实,这我也该想到了,前一个参数是文件名称的全称包含它的路径,所以我们改的话也是要加上它的目标路径的(相对路径,不然又要到系统里的temp找了),而不只是它的名字。本次的结果是正确的,在项目的temp下,出现change.txt文件,但是返回的信息还是temp加一个长串字符,这样,我们也该知道,这是它原生态的名字,而不是我们改过后的。

  • 相关阅读:
    C#经典书籍推荐 [转]
    ubuntu的ADSL拨号上网(主要是无线网情况下) [转]
    2007元旦粤北山区:我的“多背1公斤”
    Javascript中给动态生成的表格添加样式,JavaScript里setAttribute的问题
    Asp.net2.0的AjaxPro中不能使用Server.HtmlEncode()函数?
    去了深圳出差,到了珠海泡温泉
    2007元旦粤北山区:翻山越岭到乳源,半途而废云门寺,风雨兼程向瑶山
    很好很强大的FLEX控件
    PHP生成PDF文档的FPDF类
    Flex,事件,绑定,机制
  • 原文地址:https://www.cnblogs.com/idealing/p/3628712.html
Copyright © 2011-2022 走看看