将node.js multipart / form-data中的文件上传到api

时间:2018-01-18 23:55:10

标签: node.js api file

我必须使用nodejs将文件上传到API,事实是,它不接受JSON对象,我需要发送它(不能将其转换为字符串)。任何想法如何发送该文件,还有一个JSON对象? (任何nodejs模块?)

var formData = {
    profile: config.widenProfile,
    filename: "example.pdf",
    file: fs.createReadStream(path),
    metadata: jsonObj,  //cant send it because of this
};
      var options = {
      method: 'POST',
      url: config.api,
      formData:formData,
      headers: {
        'Authorization': 'Bearer '+config.token
      }
    };

    request(options, function (error, response, body) {
      console.log('Status:', response.statusCode);
      console.log('Headers:', JSON.stringify(response.headers));
      console.log('Response:', body);
    });

1 个答案:

答案 0 :(得分:0)

这对你有用吗?我使用一个简单的JSON测试它似乎工作,记住你需要使用多个深度和数组来展平JSON以使其工作,但我认为你可以编写一个通用函数来实现它。

在服务器端,您将在名为' jsonObj'的字段中收到JSON对象,请告诉我这是否有帮助

var fs = require("fs");
var request = require("request");


var  jsonObj = {
    "name" : "value",
    "name1" : "value1",
    "integer_val" : 1,
    "integer_val2" : 2
}
var payload = { method: 'POST',
    url: 'http://localhost:3000/PDFReader',
    headers:
        {'cache-control': 'no-cache',
            'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' },
    proxy: '',
    json:true,
    formData:
        {  pdf: fs.createReadStream("./ICR.PDF")
        }
};

var keys = Object.keys(jsonObj);

keys.forEach(function(key) {
    var formatKey = 'jsonObj[' + key + ']';
    payload.formData[formatKey] =jsonObj[key];
});
console.log(payload);
request(payload, function (error, response, body) {
    if (error) throw new Error(error);

    console.log(body);
});