📅  最后修改于: 2023-12-03 15:33:00.476000             🧑  作者: Mango
Multer()是Node.js中最受欢迎的文件上传中间件之一。它可以在后端轻松处理文件的上传和存储。
Multer()可以处理以下内容:
Multer()是一种非常易于使用和快速的中间件,可以轻松地上传文件。最主要的优点之一是其底层的Stream API,使得处理文件上传变得更加高效。
const multer = require('multer');
const upload = multer({ dest: 'uploads/' })
app.post('/profile', upload.single('avatar'), function (req, res, next) {
// req.file 是 `avatar` 文件的信息
// req.body 将具有文本域数据,如果存在的话
})
在安装Multer()之前,你需要先安装Node.js和NPM。随后,你可以通过运行以下命令来安装Multer():
npm install multer
要使用Multer()来处理文件上传,你需要先实例化Multer()并配置选项。然后你可以通过调用中间件函数,将它添加到Express应用程序中。最后,你还需要在路由处理程序中找到上传的文件,将它保存在服务器上,并返回响应。
你可以使用multer()函数实例化Multer()。这个函数接收一个对象,该对象定义了选项:
dest
- 规定了上传文件的存储位置。fileFilter
- 规定了上传文件的格式和类型。limits
- 规定了上传文件的最大大小。举个例子,下面的代码定义了一个存储所有上传文件的uploads目录,并限制了上传文件的大小为1MB:
const multer = require('multer')
const upload = multer({
dest: 'uploads/',
limits: {
fileSize: 1000000 // bytes
}
})
你需要将Multer()作为中间件添加到Express应用程序中。
const express = require('express')
const multer = require('multer')
const app = express()
const upload = multer({ dest: 'uploads/' })
app.post('/upload', upload.single('photo'), (req, res) => {
console.log(req.file)
res.send('File uploaded successfully!')
})
上传的文件将使用upload.single()
方法传递给/upload
端点,该方法指定上传一个文件(文件的命名和属性名在这里都是“photo”)。路由处理程序使用req.file变量来访问上传的文件,这个变量被Multer()翻译成Express的request对象,包含了文件的元数据,例如文件名、文件大小、文件类型及文件路径等信息。
在上述示例中,我们使用了upload.single()
方法。Multer()还提供了其他一些用于上传文件的方法:
upload.array(fieldname[, maxCount])
- 处理单个字段上传的文件数组。fieldname是传递给HTML表单的字段名,maxCount是表单允许上传的文件的最大数量。upload.fields(fields)
- 处理具有多个文件的特定字段的文件数组。fields指定上传文件名和属性名的键值对。upload.none()
- 确保没有上传的文件。如果有上传文件,它将抛出一个错误,否则它将执行唯一的请求处理程序。upload.any()
- 处理表单中的所有上传文件。无论有多少传入的文件,它都将工作。Multer()通过将上传的文件存储在内存中或将其存储在服务器的磁盘上,实现了文件上传。你可以通过调用upload()
或diskStorage()
方法,对存储的位置和文件的重命名进行自定义。
下面,让我们来看看如何通过Multer()在服务器上存储文件。
const express = require('express')
const multer = require('multer')
const app = express()
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/')
},
filename: function (req, file, cb) {
cb(null, Date.now() + '-' + file.originalname)
}
})
const upload = multer({ storage: storage })
app.post('/upload', upload.single('photo'), (req, res) => {
console.log(req.file)
res.send('File uploaded successfully!')
})
在上述示例中,使用了diskStorage()
方法来自定义存储位置和文件的重命名。destination选项规定了上传文件的存储目录,而filename选项允许你指定如何重命名上传的文件。
Multer()是Node.js中最好的文件上传中间件之一,它可以帮助你处理文件上传和存储。在使用Multer()时,通常需要实例化它、添加到Express应用程序中,并使用Multer()的API来处理上传的文件。无论你是开发新的应用程序还是维护一个现有的应用程序,你都应该考虑使用Multer()。