node formidable
时间: 2023-06-29 16:20:23 浏览: 47
`formidable` 是一个 Node.js 模块,用于解析 HTTP 请求中的表单数据,支持文件上传。它可以将表单数据解析为可读流或者对象,非常适合处理大文件上传和表单数据解析。
`formidable` 的主要特点如下:
- 可处理普通表单字段和上传文件。
- 可将表单数据解析为对象或可读流。
- 可设置上传文件的最大大小和上传目录等参数。
- 支持自定义上传文件的命名和存储路径。
- 支持自定义解析器,可处理非标准的表单数据格式。
- 支持流式处理大文件上传,不会占用过多内存。
使用 `formidable` 模块非常简单,只需要通过 `require('formidable')` 引入模块,然后创建一个 `Formidable` 实例,调用 `parse()` 方法解析表单数据即可。通常情况下,我们会将 `Formidable` 实例放在 HTTP 服务器的请求处理函数中,以便处理客户端提交的表单数据。
下面是一个使用 `formidable` 模块处理文件上传的示例代码:
```javascript
const http = require('http');
const formidable = require('formidable');
const fs = require('fs');
http.createServer((req, res) => {
if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
const form = new formidable.IncomingForm({
uploadDir: './uploads', // 上传文件保存的目录
keepExtensions: true, // 是否保留上传文件的扩展名
maxFileSize: 2 * 1024 * 1024, // 上传文件大小限制,单位为字节
});
form.parse(req, (err, fields, files) => {
if (err) {
console.error(err);
res.statusCode = 500;
res.end('Internal Server Error');
return;
}
// 处理上传的文件
const { file } = files;
const { path, name } = file;
const newPath = `${form.uploadDir}/${name}`;
fs.rename(path, newPath, (err) => {
if (err) {
console.error(err);
res.statusCode = 500;
res.end('Internal Server Error');
return;
}
res.statusCode = 200;
res.end('File uploaded successfully');
});
});
} else {
res.statusCode = 404;
res.end('Not Found');
}
}).listen(8080);
```
在上面的示例代码中,我们使用 `formidable` 模块处理客户端上传的文件,并将上传的文件保存到指定的目录中。在 `IncomingForm` 构造函数中,我们可以设置上传文件的参数,如上传目录、是否保留扩展名、上传文件大小限制等。在 `parse()` 方法回调函数中,我们处理上传的文件,将其重命名并保存到指定的目录中。最后,我们向客户端发送上传成功的响应。