📜  Node.js 中的文件上传(1)

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

Node.js 中的文件上传

在 Web 开发中,文件上传是一个常见的功能。Node.js 提供了很多方式来实现文件上传,本文将介绍一些常用的方法和工具。

1. 使用原生的 http 模块进行文件上传

在 Node.js 中,可以使用原生的 http 模块来实现文件上传。以下是使用 http 模块进行文件上传的基本步骤:

  1. 创建一个 HTTP 服务器,监听指定的端口。
  2. 在服务器的请求事件中,解析请求的内容。对于文件上传,通常是通过读取请求的 Content-TypeContent-Disposition 来获取上传文件的相关信息。
  3. 创建一个可写流,将接收到的数据写入到磁盘上的文件中。

以下是一个简单的示例代码:

const http = require('http');
const fs = require('fs');

const server = http.createServer((req, res) => {
  if (req.method === 'POST' && req.url === '/upload') {
    // 解析请求的内容
    const contentType = req.headers['content-type'];
    const fileName = req.headers['content-disposition']
      .split(';')
      .find(e => e.includes('filename='))
      .trim()
      .split('=')[1]
      .replace(/"/g, '');

    // 创建可写流
    const writeStream = fs.createWriteStream(`./uploads/${fileName}`);

    req.pipe(writeStream); // 将数据写入文件

    req.on('end', () => {
      console.log('文件上传完成');
      res.statusCode = 200;
      res.end('文件上传完成');
    });
  } else {
    res.statusCode = 404;
    res.end('Not Found');
  }
});

server.listen(8080, () => {
  console.log('Server started on port 8080');
});
2. 使用第三方库进行文件上传

除了使用原生的 http 模块,还可以使用一些第三方库来简化文件上传的过程。以下是几个常用的文件上传库:

  • formidable: 可以方便地解析表单数据和上传文件。
  • multer: Express.js 的中间件,用于处理上传的文件。

这些库提供了更高级的功能,比如自动解析表单数据、限制文件大小、保存文件到特定的目录等。使用这些库可以显著简化文件上传的代码。

以下是使用 multer 实现文件上传的示例代码:

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

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

app.post('/upload', upload.single('file'), (req, res) => {
  console.log('文件上传完成');
  res.send('文件上传完成');
});

app.listen(8080, () => {
  console.log('Server started on port 8080');
});
总结

文件上传是 Web 开发中常用的功能,Node.js 提供了很多方式来实现文件上传。可以使用原生的 http 模块来手动处理上传的文件,也可以使用第三方库来简化操作。根据具体的需求,选择适合的方法和工具来实现文件上传功能。