Nodejs express怎么实现文件的上传和下载

Nodejs express怎么实现文件的上传和下载

express怎么实现文件的上传和下载

3 回复

Node.js Express 实现文件的上传和下载

在Web应用开发中,文件的上传和下载是非常常见的功能。使用Node.js和Express框架可以很方便地实现这一功能。下面我们将通过一个简单的示例来演示如何使用Express实现文件的上传和下载。

文件上传

  1. 安装依赖 首先,我们需要安装一些必要的依赖包,包括express, multer(用于处理文件上传)以及body-parser(用于解析请求体)。

    npm install express multer body-parser
    
  2. 创建服务器

    创建一个基本的Express服务器,并设置Multer来处理文件上传。

    const express = require('express');
    const multer = require('multer');
    const path = require('path');
    
    const app = express();
    const port = 3000;
    
    // 设置Multer存储选项
    const storage = multer.diskStorage({
      destination: function (req, file, cb) {
        cb(null, 'uploads/')
      },
      filename: function (req, file, cb) {
        cb(null, Date.now() + path.extname(file.originalname))
      }
    });
    
    const upload = multer({ storage: storage });
    
    // 创建uploads目录(如果不存在)
    const fs = require('fs');
    if (!fs.existsSync('uploads')) {
      fs.mkdirSync('uploads');
    }
    
    // 处理文件上传的路由
    app.post('/upload', upload.single('file'), (req, res) => {
      res.send('File uploaded successfully!');
    });
    
    app.listen(port, () => {
      console.log(`Server running at http://localhost:${port}/`);
    });
    

文件下载

  1. 创建下载路由

    我们需要创建一个路由来处理文件的下载请求。

    app.get('/download/:filename', (req, res) => {
      const filePath = path.join(__dirname, 'uploads', req.params.filename);
      res.download(filePath, (err) => {
        if (err) {
          res.status(500).send('Error downloading file.');
        }
      });
    });
    
  2. 测试上传和下载

    • 启动服务器后,你可以通过访问http://localhost:3000/upload来上传文件。
    • 上传成功后,可以通过访问http://localhost:3000/download/文件名来下载文件。

总结

以上就是使用Express和Multer实现文件上传和下载的基本步骤。通过配置Multer的存储选项,我们可以控制上传文件的保存路径和命名规则。而通过创建相应的路由,我们能够轻松地实现文件的下载功能。希望这个示例对你有所帮助!


express 集成了 formidable,你的 form 用 enctype=“multipart/form-data” 就可以上传文件了。

要在Node.js中使用Express实现文件的上传和下载,你可以使用multer库来处理文件上传,并使用基本的路由来处理文件下载。以下是详细的步骤和示例代码。

文件上传

  1. 安装必要的库

    npm install express multer
    
  2. 创建上传逻辑: 创建一个简单的Express应用来处理文件上传。

    const express = require('express');
    const multer = require('multer');
    
    const app = express();
    const upload = multer({ dest: 'uploads/' }); // 设置上传目录
    
    app.post('/upload', upload.single('file'), (req, res) => {
      res.send('File uploaded successfully.');
    });
    
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
    

文件下载

  1. 创建下载逻辑: 使用Express的路由来提供文件下载功能。
    app.get('/download/:filename', (req, res) => {
      const filePath = `uploads/${req.params.filename}`;
      res.download(filePath, req.params.filename); // 自动设置正确的Content-Type
    });
    

完整代码示例

const express = require('express');
const multer = require('multer');

const app = express();
const upload = multer({ dest: 'uploads/' });

app.post('/upload', upload.single('file'), (req, res) => {
  res.send('File uploaded successfully.');
});

app.get('/download/:filename', (req, res) => {
  const filePath = `uploads/${req.params.filename}`;
  res.download(filePath, req.params.filename);
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

解释

  • Multer:这是一个中间件,用于处理multipart/form-data,主要用于上传文件。
  • upload.single(‘file’):定义了一个单文件上传的策略,file是表单中文件字段的名称。
  • res.download():自动设置正确的Content-Type并发送文件给客户端。

这样,你就可以通过访问/upload端点上传文件,通过访问/download/{filename}端点下载文件了。

回到顶部