如何在 node.js 中处理 multipart/form-data
Posted
技术标签:
【中文标题】如何在 node.js 中处理 multipart/form-data【英文标题】:how to handle multipart/form-data in node.js 【发布时间】:2012-10-21 20:57:37 【问题描述】:我正在使用多部分表单数据从客户端上传图像文件。我想使用 node.js 在服务器端接收并将其作为文件写入。
<html>
<body>
<form action="url" method="post" enctype="multipart/form-data">
<input type="text" name="imageName">
<input type="file" name="sam">
</form>
</body>
</html>
这是我的客户端代码。如何在服务器端处理这个文件。
【问题讨论】:
【参考方案1】:链接下面是重复的问题。
Uploading images using Node.js, Express, and Mongoose
示例如下:
// Expose modules in ./support for demo purposes
require.paths.unshift(__dirname + '/../../support');
/**
* Module dependencies.
*/
var express = require('../../lib/express')
, form = require('connect-form');
var app = express.createServer(
// connect-form (http://github.com/visionmedia/connect-form)
// middleware uses the formidable middleware to parse urlencoded
// and multipart form data
form( keepExtensions: true )
);
app.get('/', function(req, res)
res.send('<form method="post" enctype="multipart/form-data">'
+ '<p>Image: <input type="file" name="image" /></p>'
+ '<p><input type="submit" value="Upload" /></p>'
+ '</form>');
);
app.post('/', function(req, res, next)
// connect-form adds the req.form object
// we can (optionally) define onComplete, passing
// the exception (if any) fields parsed, and files parsed
req.form.complete(function(err, fields, files)
if (err)
next(err);
else
console.log('\nuploaded %s to %s'
, files.image.filename
, files.image.path);
res.redirect('back');
);
// We can add listeners for several form
// events such as "progress"
req.form.on('progress', function(bytesReceived, bytesExpected)
var percent = (bytesReceived / bytesExpected * 100) | 0;
process.stdout.write('Uploading: %' + percent + '\r');
);
);
app.listen(3000);
console.log('Express app started on port 3000');
如果您的问题没有解决,请访问 this link 。这是一篇关于文件上传的好文章。
【讨论】:
【参考方案2】:您可以使用请求模块来发送多部分请求。下面是示例代码:
var jsonUpload = ;
var formData =
'file': fs.createReadStream(fileName),
'jsonUpload': JSON.stringify(jsonUpload)
;
var uploadOptions =
"url": "https://upload/url",
"method": "POST",
"headers":
"Authorization": "Bearer " + accessToken
,
"formData": formData
var req = request(uploadOptions, function(err, resp, body)
if (err)
console.log('Error ', err);
else
console.log('upload successful', body)
);
【讨论】:
他想处理数据,而不是发送数据。以上是关于如何在 node.js 中处理 multipart/form-data的主要内容,如果未能解决你的问题,请参考以下文章
仅使用 vanilla node.js 将 multipart/form-data 与文件组合
尝试使用 node.js supertest 发布 multipart/form-data
如何在 formData 对象中附加文件而不在 Node.js 中物理保存文件?