Nodejs文件上传处理模块formidable的使用

Nodejs文件上传处理模块formidable的使用
formidable 是一个用于 Node.js 的库,可以用来处理文件上传。它支持处理 multipart/form-data 类型的数据,这是 HTML 表单上传文件时默认使用的格式。

下面是一个简单的示例,展示如何在 Node.js 中使用 formidable 来处理文件上传:

  1. 首先安装 formidable:

    npm install formidable
    
  2. 创建一个基本的 HTTP 服务器来接收文件上传:

const http = require('http');
const url = require('url');
const path = require('path');
const fs = require('fs');
const formidable = require('formidable');

function start(route, handle) {
    function onRequest(request, response) {
        const pathname = url.parse(request.url).pathname;
        console.log("Request for " + pathname + " received.");

        if (pathname === '/upload') {
            let form = new formidable.IncomingForm();
            form.uploadDir = "./uploads";
            form.keepExtensions = true;

            form.on('fileBegin', (name, file) => {
                // 文件上传前的操作
                console.log(`File upload started: ${file.name}`);
                if (!fs.existsSync(form.uploadDir)) {
                    fs.mkdirSync(form.uploadDir);
                }
            });

            form.on('file', (field, file) => {
                // 文件上传后的操作
                console.log(`File uploaded: ${file.path}`);
                response.writeHead(200, {'Content-Type': 'text/plain'});
                response.write('File uploaded successfully.\n');
                response.end();
            });

            form.parse(request, (err, fields, files) => {
                if (err) {
                    console.error(err);
                    response.writeHead(500, {'Content-Type': 'text/plain'});
                    response.write('Error occurred during file upload.\n');
                    response.end();
                }
            });
        } else {
            response.writeHead(200, {"Content-Type": "text/html"});
            response.write('<html><body>');
            response.write('<form action="/upload" method="post" enctype="multipart/form-data">');
            response.write('<input type="file" name="upload"><br>');
            response.write('<input type="submit" value="Upload File"></form>');
            response.write('</body></html>');
            response.end();
        }
    }

    http.createServer(onRequest).listen(8888);
    console.log("Server has started.");
}

exports.start = start;

在这个例子中,我们创建了一个简单的 HTTP 服务器,监听端口 8888。当用户访问根路径时,会显示一个表单供用户选择文件进行上传。当用户提交表单时,请求会被路由到 /upload 路径,在这里我们会使用 formidable 来解析上传的数据。

注意:你需要确保 ./uploads 目录存在或者在代码中创建它,以避免文件上传失败。

这个示例展示了如何设置 formidable 处理器,监听文件上传事件,并将上传的文件保存到指定目录。你可以根据需要调整文件保存逻辑和其他处理逻辑。


3 回复

当然!Formidable 是一个非常强大的 Node.js 模块,用于处理文件上传。首先,你需要安装它:

npm install formidable

然后你可以这样使用它:

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

http.createServer((req, res) => {
  if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
    // 创建表单解析器实例
    const form = new formidable.IncomingForm();
    
    // 解析请求数据
    form.parse(req, (err, fields, files) => {
      if (err) {
        res.writeHead(400, { 'Content-Type': 'text/html' });
        res.end('<h1>Upload failed</h1>');
        return;
      }
      
      res.writeHead(200, { 'Content-Type': 'text/html' });
      res.end(`<h1>Upload successful: ${fields.title}</h1>`);
    });

    return;
  }

  res.writeHead(200, { 'Content-Type': 'text/html' });
  res.end(`
    <form action="/upload" enctype="multipart/form-data" method="post">
      Title: <input type="text" name="title"><br>
      File: <input type="file" name="upload" multiple="multiple"><br>
      <input type="submit" value="Upload">
    </form>
  `);
}).listen(3000);

这段代码创建了一个简单的 HTTP 服务器,它可以接收文件上传,并显示一个表单供用户上传文件。希望这对你有帮助!


Formidable 是一个流行的 Node.js 模块,用于处理文件上传。下面是一个简单的示例,展示如何使用 Formidable 来处理文件上传。

首先,确保你已经安装了 formidable 模块。如果没有安装,可以通过 npm 安装:

npm install formidable

接下来,创建一个简单的 Node.js 应用来处理文件上传。这里有一个完整的例子:

const http = require('http');
const url = require('url');
const fs = require('fs');
const path = require('path');
const formidable = require('formidable');

const server = http.createServer((req, res) => {
  if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
    // 创建表单解析器实例
    const form = new formidable.IncomingForm();

    // 设置上传目录
    form.uploadDir = './uploads';

    // 解析请求体中的数据
    form.parse(req, (err, fields, files) => {
      if (err) {
        console.error(err);
        return res.end('Error uploading file.');
      }

      // 假设文件字段名为 'upload'
      const oldPath = files.upload.path;
      const newPath = path.join(form.uploadDir, path.basename(files.upload.path));

      // 移动文件到新的位置
      fs.rename(oldPath, newPath, (err) => {
        if (err) {
          console.error(err);
          return res.end('Error moving file.');
        }
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.write('<h1>File uploaded successfully!</h1>');
        res.end();
      });
    });
  } else {
    // 显示上传表单
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.write(`
      <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="upload">
        <input type="submit" value="Upload">
      </form>
    `);
    res.end();
  }
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

这个示例中,我们创建了一个 HTTP 服务器来监听端口 3000。当访问根路径时,会显示一个简单的 HTML 表单用于上传文件。当提交表单时,服务器将使用 Formidable 处理上传的文件,并将其移动到指定的目录(在这个例子中是 ./uploads)。

请注意,你需要创建 ./uploads 目录,否则文件上传将会失败。

Formidable是一个Node.js模块,用于处理HTTP的文件上传。你可以通过npm安装它(npm install formidable)。基本使用如下:

  1. 引入模块:const formidable = require('formidable');
  2. 创建表单处理对象:let form = new formidable.IncomingForm();
  3. 配置选项如上传目录、文件名等。
  4. 使用form.parse(req)解析请求。
  5. 监听事件处理文件和字段,例如form.on('file', function(name, file){})

这将帮助你开始处理文件上传。

回到顶部