节点 js 获取具有表单 enctype 多形式的值字段类型



我使用以下代码:

节点.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));
      });

最新更新