文件上传,算是网页中屡见不鲜的功能。搞web开发的程序员没有不知道的。尽管如此,我也得拿出来说说,作为自己学习成果。 事物都是一个不断更新迭代的过程。目前,所做的仅仅在跟随巨人脚步。学习记录,但愿有助新人。:)
直接开干
用过node写程序的人,都知道node模块话开发,有时候动不动就是十来个依赖包导入。比如这个node程序,要用到的模块就有12个。当然文件上传仅需用到四个模块。不管怎么说,程序开始前,还是老老实实导包吧,这个过程是必须的。 文件上传实列需要用的模块有: 1. express 2. multer 3. path 4. fs
代码开始,导入三方模块 程序初始化。
node
const express = require('express'); //express http 框架 const fs = require('fs'); // const multer = require('multer'); //处理multitype 格式的文件上传。 const objMulter = multer({dest:'.www/upload'}) //调用multer返回对象,指定上传文件保存位置。 const pathLib = require('path'); var server = express(); server.listen(80);html
......... <form action="http://localhost:80/" method = "post" enctype="multipart/form-data"> 上传文件:<input type="file" name="pic"> 上传:<input type="submit" value="上传"> </form> ............后端初始化完成,接下来分析,为完成文件上传功能,我们需要做的有。
上传文件地址(上传文件保存地址)接受文件(获取存放服务器端文件基本信息)( post文件上传,前端我们需要设置表单上传数据类型)暂时先是这样一个思路,其他文件类型,上传文件大小限制且不说。
前端设置form数据格式, enctype="multipart/form-data'文件上传位置设置。
const multer = require('multer'); const objMulter = multer({dest:'.www/upload'});对,初始化过程已经完成文件上传保存目录。 导入multer模块,调用并传入option, dest属性值用于指定存放路径。这里我们在项目根目录创建/www并创建子目录/upload用于存放上传文件。
获取接受文件 通过req.files中,获取上传文件信息。
server.use(objMulter.any()); //向express注册multer server.use('/', (req, res) => { //req.body普通表单数 //req.files正真的上传文件 //获取原始文件名 //path + 扩展名(上床文件扩展名) var newName = req.files[0].path + pathLib.parse(req.files[0].originalname).ext; fs.rename(req.files[0].path, newName, (err) => { if(err){ // res.send('上传失败'); res.send(err) }else{ res.send('success'); } }); console.log(req.files) });req.files结果
为了防止上传的文件重名,服务端对计算机原始文件名进行了随机命名 可以看出上面文件信息,源文件是 test.html 上传过后,文件名是 path。还有一点,上传的文件是二进制内容,是无法获取文件内容的。
对此怎么办呢。记得fs系统模块有一个,rename的api,可以文件重命名。添加扩展名。这样就能打get文件内容
fs.rename(pramas1,prmas2,callback) 参数解读: 第一个是pramas1是原文件名, pramas2新文件名。 callback异步回调 结果 可以看到,文件已经上传成功了。