找了不少文件上传的相关模块,最后选择了比较常用,并且是express推荐使用的 multer 来实现文件上传,附上 GitHub 地址
1. 开始
开始第一步,自然就是安装模块,不多说
这里简单说一下,因为文件上传是用 post 方法提交数据,所以上传的单文件或者多文件会作为一个 body 体添加到请求对象中,我们可以通过 req.file 或者 req.files 查看上传后文件的相关信息。
该对象的 key 值是固定的,velue 值根据配置生成,用于实现相关逻辑
2. 实现
实现分两部分,前端和后端
前端
前端就是普通的写法,form 表单提交
切记,enctype="multipart/form-data" 这个属性一定要加上,否则后台接收不到文件。
后端
首先我们新建配置文件,upload.js
var storage = multer.diskStorage({
destination: function (req,file,cb) {
cb(null,'uploads/')
},filename: function (req,Date.now()+file.originalname)
}
})
var upload = multer({ storage: storage })
module.exports = upload;
diskStorage
方法相当于创建一个磁盘存储引擎,配置文件上传路径,文件名等,可控性更高。
然后新建路由接收文件,file.js
var router = express.Router();
// 引入配置文件
var upload = require('../config/upload');
router.post('/upload',upload.single('avatar'),function(req,res,next) {
res.send(req.file);
});
module.exports = router;
file.js 中 upload.single() 方法表示接受单文件,常用的有
fname 是前端