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

  • 相关阅读:
    水滴二次开发日志5
    水滴二次开发日志4
    水滴二次开发日志3
    水滴二次开发日志2
    NOIp2020AFO记
    Diary(2020十一月 NOIP赛前集训)
    我们的Gary真的是太强辣
    Diary(2020十月 CSP赛前集训)
    Diary(2020九月 半集训)
    Music
  • 原文地址:https://www.cnblogs.com/idealing/p/3628712.html
Copyright © 2011-2022 走看看