multer
multer
Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件。
注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据。
标签内设置属性 enctype=multipart/form-data
是必须的,这样才可以上传文件,方式为post。
<form action="http://localhost:8080/" method="post" enctype="multipart/form-data">
文件:<input type="file" name="f1" />
<input type="submit" value="上传">
</form>
通常我们在后台接收文件时喜欢用bodyparser解决,可是bodyparser只能解决文本,我们用介个处理的话只能得到文件的名字,multer则可以帮助我们上传正儿八经的文件!!!
const express=require('express');
const multer=require('multer');
var objMulter=multer();
var server=express();
server.use(objMulter.any());
server.post('/', function (req, res){
console.log(req.files);
});
server.listen(8080);
/*[ { fieldname: 'f1',
originalname: '111.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
buffer:
<Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 60 00 60 00 00 ff db 00 43 00 08 06 06 07 06 05 08 07 07 07 09 09 08 0a 0c 14 0d 0c 0b 0b 0c 19 12 13 0f ... >,
size: 798 } ]*/
//上传一张图片得到的数据
可以将buffer数据利用readfile保存,但是这样buffer就占用了内存,所以我们应该想想别的办法,直接将文件写入磁盘里。
var objMulter=multer({dest: './www/upload/'});
multer中可以添加dest指定路径
//得到的数据的格式悄悄地发生了变化
[ { fieldname: 'f1',
originalname: '111.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: './www/upload/',
filename: '8b1444c78da2394b89e8f90ef507ff7a',
path: 'www\\upload\\8b1444c78da2394b89e8f90ef507ff7a',
size: 798 } ]
可是即便如此我们得到的还是不是文件本身,而是一堆乱码,因为我们给他假的扩展名不对。
借用中间件给文件重命名
更改文件名
const fs=require('fs');
fs.rename('a.txt', 'b.txt', function (err){
console.log(err);
});
获取文件扩展名
const path=require('path');
var str='c:\\wamp\\www\\a.html';
var obj=path.parse(str);
//base 文件名部分
//ext 扩展名
//dir 路径
//name 文件名部分
console.log(obj);
完整版代码
const express=require('express');
const bodyParser=require('body-parser');
const multer=require('multer');
const fs=require('fs');
const pathLib=require('path');
var objMulter=multer({dest: './www/upload/'});
var server=express();
//错误
//server.use(bodyParser.urlencoded({extended: false}));
server.use(objMulter.any());
server.post('/', function (req, res){
//新文件名
//'./www/upload/dfb33662df86c75cf4ea8197f9d419f9' + '.png'
var newName=req.files[0].path+pathLib.parse(req.files[0].originalname).ext;
fs.rename(req.files[0].path, newName, function (err){
if(err)
res.send('上传失败');
else
res.send('成功');
});
//1.获取原始文件扩展名
//2.重命名临时文件
});
server.listen(8080);
大功告成la!!!