📅  最后修改于: 2023-12-03 15:17:44.980000             🧑  作者: Mango
Multer 是一个 Node.js 的 middleware,可以让我们轻松地处理 HTTP 请求中的多部分数据。在本文中,我们将学习如何使用 Multer 保存带有扩展名的文件。
Multer 可以处理不同类型的数据,包括文本、JSON、图像、视频等。要使用 Multer 保存带有扩展名的文件,我们需要安装 Multer 并设置存储引擎。
要安装 Multer,可以使用 npm 命令行工具。
npm install multer
在使用 Multer 之前,我们需要设置存储引擎。存储引擎决定了上传的文件的存储位置以及文件命名规则等。Multer 支持多种存储引擎,包括磁盘存储引擎、内存存储引擎、亚马逊 S3 存储引擎等。
例如,以下代码将使用磁盘存储引擎将文件保存在本地磁盘上:
const multer = require('multer');
// Set storage engine
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads/');
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() + '.' + file.originalname.split('.').pop());
}
});
// Initialize upload
const upload = multer({
storage: storage
});
在上面的代码中,我们在磁盘上创建了一个名为 uploads 的文件夹。存储引擎的 destination() 函数指定了文件的存储路径,而 filename() 函数用于生成唯一的文件名。在此示例中,我们将使用原始文件名的扩展名创建新的文件名。
要处理文件上传请求,我们可以使用 Multer 中间件的 single() 或 array() 方法。使用 single() 方法处理单个文件上传请求,而 array() 方法用于处理多个文件上传请求。
例如,以下代码将处理一个名为 file 的文件上传请求:
const express = require('express');
const multer = require('multer');
const app = express();
// Set storage engine
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads/');
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() + '.' + file.originalname.split('.').pop());
}
});
// Initialize upload
const upload = multer({
storage: storage
});
// Handle file upload request
app.post('/upload', upload.single('file'), function (req, res) {
res.json({
message: 'File uploaded successfully'
});
});
// Start server
app.listen(3000, function () {
console.log('Server started on port 3000');
});
在上面的代码中,我们使用 single() 方法处理单个文件上传请求。upload.single() 方法接受一个名为 file 的参数,这是我们用于上传文件的 input 元素的 name 属性。在这个例子中,我们只处理一个文件上传请求,因此使用 single() 方法。
当客户端发送一个名为 file 的 HTTP POST 请求时,我们使用 upload.single() 方法处理该请求。在处理完该请求后,我们将响应一个包含消息 File uploaded successfully 的 JSON 对象。
Multer 是 Node.js 用于处理 HTTP 请求中的多部分数据的中间件。它可以轻松地处理文本、JSON、图像、视频等不同类型的数据。在本文中,我们学习了如何使用 Multer 保存带有扩展名的文件。我们看到了如何设置存储引擎,并使用 Multer 中间件的 single() 或 array() 方法处理文件上传请求。