📜  Express如何实现文件上传和下载?(1)

📅  最后修改于: 2023-12-03 15:14:57.788000             🧑  作者: Mango

Express如何实现文件上传和下载?

在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

完成以上操作即可实现文件上传和下载功能。

完整代码可以参考以下链接: