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加一个长串字符,这样,我们也该知道,这是它原生态的名字,而不是我们改过后的。

posted @ 2014-03-27 16:54  idealing  阅读(3154)  评论(0编辑  收藏  举报