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加一个长串字符,这样,我们也该知道,这是它原生态的名字,而不是我们改过后的。
node 上传文件 路径 重命名等问题的更多相关文章
- NodeJS+formidable实现文件上传加自动重命名
前述 本人node初学者,此前使用原生node实现文件上传时遇到了一些困难,只做到了.txt 和.png两中格式的文件可以正常上传,如果上传其他格式文件服务端保存的文件会无法正常打开,原因是对form ...
- django如何给上传的图片重命名(给上传文件重命名)
1.先在你项目中添加一个文件夹如:system 在文件夹下添加__init__.py 和storage.py文件,并在storage.py中添加如下代码: # -*- coding: UTF-8 -* ...
- node 上传文件 http client to post file
node做http client 发送post数据是很容易的事情,但要上传文件就不是太容易了主要是因为上传文件的报文和普通post是不太一样的 要了解http post可以看下这个 https://i ...
- input[type='file']获取上传文件路径案例
最近在项目时,需要获取用户的上传文件的路径,便写了一个demo: <body> <input type="file" name="" valu ...
- node - 上传文件并且修改名称
html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- node上传文件并在网页中展示
一.需求 1.当用户请求http://domain/start时,可以看到一个欢迎页面,页面上有一个文件上传的表单. 2.用户可以选择一个图片并提交表单,随后文件将被上传到http://domain/ ...
- jboss7 添加虚拟目录 上传文件路径
直接在jboss-as-7.1.1.Final\welcome-content\下加个子目录: jboss-as-7.1.1.Final\welcome-content\logs. 即可访问.
- springboot上传文件路径存放
@Beanpublic EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer() { return (Config ...
- linus jsch上传文件
package com.osplat.util; import java.io.*; import com.jcraft.jsch.*;import com.osplat.bean.Resultmod ...
随机推荐
- leetcode Valid Sudoku python
#数独(すうどく,Sūdoku)是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫内的数字均含1-9,不重复.#数独盘 ...
- Linux学习之给指定用户发邮件
发送邮件 进入 mail 程序后的操作都很简单,但是可以不进入 mail 的 & 操作提示符界面,下面举几个实用例子: 1.给 snailwarrior@qq.com 发信 [root@pps ...
- struts2在result中使用el表达式碰到的问题
<result name="success">/html/portlet/ext/trainingmanagement/download_file.jsp?path=$ ...
- CMD Create Database & Table
Just do it: /* SQL 创建库 CREATE DATABASE jsp_demo DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; ...
- VHDL testbench 例子,包含向文件中写数据
LIBRARY ieee; USE ieee.std_logic_1164.ALL; use std.textio.all; use ieee.std_logic_textio.all; EN ...
- vmware 使用技巧
1.虚拟机如何进入BIOS界面? 方法: 1) 开机按F2 2) 若来不及按F2的话,可以通过以下 2. 如何让虚拟机进入安全模式? 方法:开机快速按F8 3. 当不能连接到vCenter Serve ...
- linux win7双系统
真恨我自己啊,刚在linux下写了这个博客,因为没有分类,添加了个linux分类.按了F5刷没了.靠,哪里有心情复述啊 一直想装直接装linux系统,现在实现他,以后也要跟上linux的笔记,不然都对 ...
- android 自定义控件,自定义属性设置
做listView的上拉下拉刷新,网上找了个历程.但是有些界面只有上拉刷新,有些界面是下拉刷新.觉得应该在xml里定义一个属性控制上下拉使能. 0.关于自定义控件: 自定义控件设计主要方式有:a) 继 ...
- arcEngine添加标注(上)
arcEngine添加标注有3个技术点:1,获得图层的属性字段:2,初始化符号显示控件:3,添加标注. 获得图层的属性字段: //每个图层都是一个表的图形化显示,ILayer跟ITale可以互相转 ...
- C++中实现链表的删除和颠倒
MFC工程中关于链表的操作 1.对于给定的整数n,编写算法删除链表中第n个节点,该链表的第一个节点由first指向. 由于C++中没有关于node的标准头文件,要先手动定义node类,此处只定义了简单 ...