Multer文件上传中间件的使用
# Multer 文件上传中间件的使用
# 安装
npm install --save multer
1
# 使用
# 介绍
Multer是一个node.js中间件,用于处理multipart/form-data类型的表单数据,它主要用于上传文件。它是写在busboy之上非常高效。
【划重点】:
Multer不会处理任何非multipart/form-data类型的表单数据。这句话很重要,如果使用表单提交,必须设置,如果不设置,将获取不到request中的file
<!-- 添加enctype才有效 -->
<form action="" method="POST" enctype="multipart/form-data"></form>
1
2
2
Multer会添加一个body对象 以及file或files对象 到express的request对象中。body对象包含表单的文本域信息,file或files对象包含对象表单上传的文件信息。
# 基本使用
var express = require('express')
var multer = require('multer')
var router = new express.Router()
// dest指明上传的文件保存的路径
var upload = multer({
dest: '/public/uploads',
})
router.post('/upload', upload.any(), function(req, res, next) {
console.log(req.files) //req.file文件的具体信息
console.log(req.files[0].originalname) //上传文件的名字信息
res.json({
status: 0,
data: req.files[0].originalname,
count: 1,
msg: '上传成功',
})
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 该方法分析
- 上传的路径写在
dest里面 - 上传的文件名字不能自己改变,且为一连串数字字母的组合
- 如果要对上传的文件进行重命名,可以通过读出该文件,然后再写入另一个新文件,你就可以对新文件重命名。
# 高级用法
# 借助DiskStorage磁盘存储引擎
var express = require('express')
var multer = require('multer')
var router = new express.Router()
var storage = multer.diskStorage({
destination: function(req, file, cb) {
// 这里指明上传存储在'/public/uploads'下
cb(null, '/public/uploads')
},
filename: function(req, file, cb) {
// 该方法返回上传的文件名+当前时间作为上传后的文件的名字
cb(null, file.fieldname + '-' + Date.now())
},
})
var upload = multer({ storage: storage })
router.post('/upload', upload.any(), function(req, res, next) {
console.log(req.files) //req.file文件的具体信息
console.log(req.files[0].originalname) //上传文件的名字信息
res.json({
status: 0,
data: req.files[0].originalname,
count: 1,
msg: '上传成功',
})
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
【注意】:
destination是用来确定上传的文件应该存储在哪个文件夹中。也可以提供一个string(例如'/public/uploads')。如果没有设置destination,则使用操作系统默认的临时文件夹。- 如果你提供的
destination是一个函数,你需要负责创建文件夹。当提供一个字符串,multer将确保这个文件夹是你创建的。 filename用于确定文件夹中的文件名的确定。 如果没有设置filename,每个文件将设置为一个随机文件名,并且是没有扩展名的。
上次更新: 2021/09/13, 15:11:59