📅  最后修改于: 2023-12-03 15:14:57.788000             🧑  作者: Mango
在Web开发中,文件上传和下载是常见的功能。Express框架提供了非常简单的方法来实现文件上传和下载。
在Express中,我们可以使用multer
模块来处理文件上传。multer
模块是一个中间件,用于处理<form>
中的enctype="multipart/form-data"
表单。
首先,我们需要使用npm安装multer
模块:
npm install multer --save
然后,在app.js
文件中,引入multer
模块并创建上传目录:
const express = require('express');
const app = express();
const multer = require('multer');
// 创建上传目录
const upload = multer({ dest: 'uploads/' });
接下来,在路由中使用upload.single()
方法来处理文件上传:
app.post('/upload', upload.single('file'), function (req, res, next) {
// req.file 是 `file` 文件信息
// req.body 将具有文本域数据,如果存在的话
res.send('文件上传成功!');
});
这里的upload.single('file')
中的file
指的是<input>
元素的name
属性。在req.file
中可以获取到上传文件的信息。
完整代码如下:
const express = require('express');
const app = express();
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });
app.post('/upload', upload.single('file'), function (req, res, next) {
res.send('文件上传成功!');
});
app.listen(3000, function () {
console.log('服务器启动成功!');
});
在Express中,我们可以通过设置Content-Disposition
头来实现文件下载。
对于文件下载,我们可以使用fs
模块来读取文件,并使用res.download()
方法来设置响应头,告诉浏览器要下载的文件名和类型:
const express = require('express');
const app = express();
const fs = require('fs');
app.get('/download/:filename', function (req, res) {
const filename = req.params.filename;
const file = `${__dirname}/downloads/${filename}`;
res.download(file, filename, function (err) {
if (err) {
console.log(err);
} else {
console.log('文件下载成功!');
}
});
});
app.listen(3000, function () {
console.log('服务器启动成功!');
});
这里的:filename
表示路由的参数,例如/download/test.pdf
会匹配到路由/download/:filename
,参数值为test.pdf
。
完成以上操作即可实现文件上传和下载功能。
完整代码可以参考以下链接: