Multer是Express官方推出的,用于Node.js multipart/form-data
请求数据处理的中间件。
它基于busboy构建,可以高效的处理文件上传,但并不处理multipart/form-data之外的用户请求
前端upload代码:
async uploadMethod(param) {
let formdata = new FormData();
formdata.append('file', param.file);
let res = await uploadRequest(formdata);
}
下面是node server端代码:
var express = require('express');
var Router = express.Router();
var multer = require('multer');
var moment = require('moment');
var timestamp = '';
var timepath = moment().format('YYYY-MM-DD');
var destination = '/upload/' + timepath;
var filename = '';
var storage = multer.diskStorage({
//这里destination是一个字符串
destination: '.' + destination,
filename: function (req, file, cb){
//自定义设置文件的名字
timestamp = new Date().getTime();
filename = 'upload-' + timestamp + '.' + file.originalname.split('.')[1];
cb(null, filename)
}
});
var upload = multer({
storage: storage
});
//处理来自页面的ajax请求。单文件上传
//多文件上传使用upload.array('file', number)
Router.post('/uploadImage', upload.single('file'), function (req, res, next) {
//拼接文件上传后的路径
var url = 'http://' + req.headers.host + destination + '/' + filename;
res.json({
code: true,
msg: '上传成功',
imageUrl: url
})
});
module.exports = Router;
注意:destination 如果是一个函数,则下面的路径必须是已经存在的路径,否则汇报错误:路径不存在;destination 如果是一个字符串,则路径不需要必须存在,会自动创建路径
如果本地访问不了已上传的图片,需要开启静态资源路径访问。
var pathname = __dirname;
//静态文件访问
app.use(express.static(pathname));