我使用以下代码:
节点.js
app.post('/upload_file', function(req, res) {
var fstream;
req.pipe(req.busboy);
var image_name=req.body.image_name;
req.busboy.on('file', function (fieldname, file, filename) {
var file_name=randomstring.generate(7)+"_"+filename;
fstream = fs.createWriteStream(__dirname + '/uploads/' + file_name);
file.pipe(fstream);
fstream.on('close', function () {
// res.send('uploaded Successfully');
});
});
res.send(image_name+""+file_name);
});
目录
<form action="/upload_file" method="POST" enctype="multipart/form-data">
Select an image to upload:
<input type="file" name="image">
<input type="text" value="test" name="image_name">
<input type="submit" value="Upload Image">
</form>
文件上传成功,但我无法提取字段image_name
,它在输出中提供了undefined
。
看起来节点默认情况下不会解析多部分/表单数据,因此您的字段image_name未定义。
很好您正在使用 busboy,但捕获image_name文件类型输入的唯一方法是使用:
req.busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
if(fieldname === 'image_name') {
image_name = fieldname;
}
});
对于字段名称,您可能需要如下所示的内容:
req.busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) {
if(fieldname === 'image_name') {
image_name = fieldname;
}
});
经过各种实验,我得到了以下解决方案
req.busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) {
console.log('Field [' + fieldname + ']: value: ' + inspect(val));
});