multer插件简介
我们知道,关于nodejs的请求中,get请求的参数都会保存在req.query中,post请求的参数都会保存在req.body中(需要借助插件body-parser 它的简单作用是将post请求的数据存入req.body中)。
而文件上传不同于get请求和post请求,它同样也需要借助一个插件multer,multer的简单作用是将上传文件的信息存入req.files中
Multer是nodejs中处理multipart/form-data数据格式(主要用在上传功能中)的中间件。该中间件不处理multipart/form-data数据格式以外的任何形式的数据
Tips:multipart/form-data是用来指定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片或者mp3等等
multer插件的使用
引入multer插件
const multer = require('multer');
设置文件存储路径
const multerObj = multer({dest:'./static/images'}); //dest表示文件上传后的存储路径
使用multer插件
router.use(multerObj.any()); //这里的any表示接收所有类型的文件
以一个form表单为例:
<form action="http://localhost/project/upload" method="post" enctype="multipart/form-data">
<input type="text" name="username"><br>
<input type="password" name="password"><br>
<input type="file" name="image"><br>
<input type="submit" value="上传">
</form>
打印出运行结果
这里有一个问题:文件上传后是没有了扩展名的,我们手动给它加上扩展名,这里利用插件path实现
插件path介绍
以一段代码为例:
const path = require("path");
var str = "c:\\www\\images\\1.jpg";
var obj = path.parse(str);
打印运行结果
nodejs代码
router.post('/upload',function(req, res){
var img = req.files[0]; //获取上传文件信息
var newname = img.path + pathLib.parse(img.originalname).ext; //添加扩展名
fs.rename(img.path,newname,function(err){ //将已上传文件重命名(加上扩展名)
console.log(err);
});
res.end();
});