返回

Nodejs多文件上传的正确姿势

前端

前言

文件上传是web开发中经常遇到的需求,通常情况下,我们可以使用HTML5的<input type="file">元素来实现。但是,如果需要监听上传进度,或者需要支持多文件上传,那么就需要使用其他的方法。

Nodejs实现多文件上传

Nodejs中可以使用multer库来实现多文件上传。multer是一个流行的Nodejs文件上传中间件,它可以帮助我们轻松地处理文件上传请求。

安装multer

npm install --save multer

使用multer库实现多文件上传

在Nodejs中,我们可以使用multer库来实现多文件上传。首先,我们需要创建一个multer实例。

const multer = require('multer');

const storage = multer.diskStorage({
  destination: 'uploads/',
  filename: function (req, file, cb) {
    cb(null, Date.now() + '-' + file.originalname);
  }
});

const upload = multer({ storage: storage });

然后,我们需要使用upload中间件来处理文件上传请求。

const express = require('express');

const app = express();

app.post('/upload', upload.array('files', 10), (req, res, next) => {
  // Handle the file upload request
});

在上面的代码中,我们使用upload.array('files', 10)来处理文件上传请求。其中,'files'是文件上传字段的名称,10是允许上传的文件数量。

当客户端发送文件上传请求时,multer会自动将文件保存到服务器上,并把保存后的文件信息存储在req.files中。

我们可以通过req.files来获取上传的文件信息,并对这些文件进行处理。

监听上传进度

要监听上传进度,我们需要使用busboy库。busboy是一个流行的Nodejs文件上传库,它可以帮助我们解析和处理文件上传请求。

安装busboy

npm install --save busboy

使用busboy库监听上传进度

在Nodejs中,我们可以使用busboy库来监听上传进度。首先,我们需要创建一个busboy实例。

const busboy = require('busboy');

const busboy = new busboy({ headers: req.headers });

然后,我们需要使用busboy实例来解析文件上传请求。

busboy.on('file', (fieldname, file, { filename, encoding, mimeType }) => {
  // Handle the file upload
});

busboy.on('finish', () => {
  // Handle the end of the file upload
});

在上面的代码中,当文件上传时,busboy会触发'file'事件。我们可以通过'file'事件来获取上传的文件信息,并对这些文件进行处理。

当文件上传完成后,busboy会触发'finish'事件。我们可以通过'finish'事件来处理文件上传后的逻辑。

总结

本文介绍了如何在Nodejs中实现多文件上传并监听上传进度。通过使用multerbusboy库,我们可以轻松地实现文件上传并监听上传进度,从而提升用户体验。