javascript - Node JS 如何将图像与请求数据一起发布到另一个服务器/api

标签 javascript node.js http-post multer

我正在尝试将图像从我的 Node JS 应用程序发布到另一个 REST API。我在 Mongo DB 中有图像(作为二进制数组数据),该图像由 Node JS 读取,然后应该发布到另一个 API。

我面临的问题是如何将请求数据与图像一起发送?我有应该与图像一起发布的原始数据(JSON 格式):

{"data":{"client":"abc","address": "123"},"meta":{"owner": "yourself","host": "hostishere"}}

我需要使用“请求”模块来执行此操作。如果有帮助,我可以使用“multer”。但是,我坚持如何将上述请求数据与图像流一起发送。以下是我当前的代码。你能帮我完成吗?

        var options = {
            host: 'hostname.com',
            port: 80,
            path: '/api/content',
            method: 'POST',
            headers:{
                'Content-Type' : 'multipart/form-data'
            }
        };

        var request =  http.request(options, function(response) {
            var str = '';
            var respTime ='';

            response.on('data', function (chunk) {
                str = str.concat(chunk);
            });
            response.on('end', () => {
                console.log('No more data in response.');
            });

            setTimeout(function() {
                res.send(JSON.stringify(
                  {
                      'imageURL': IMG_URL,
                      'imageId': IMG_ID,
                      'body': JSON.parse(str)
                  }
                ));
            }, 1000);
        });

        request.on('error', (e) => {
          console.error('**** problem with request: ', e);
        });

        request.write(image.IMG_STR); //image.IMG_STR is the binary array representation of the image.
        request.end();

更新:2017 年 6 月 6 日

于是,正好和提供端点的REST团队聊了聊,发现应该按照下面的特定格式发送数据。下面是成功请求的快照。有人可以帮我处理我应该使用的 Node 代码吗?我试过 form-data 包,但遇到了同样的错误: Postman Snapshot

最佳答案

如果您也可以控制“其他 API”,则可以将图像作为二进制数据的 base64 表示包含在 post 正文中(并在 API 端对其进行解码)

2017 年 6 月 6 日更新的答案:

根据屏幕截图,API 需要 multipart/formdata。 此类带有“请求”模块的请求记录在 https://github.com/request/request#multipartform-data-multipart-form-uploads

快速示例(未测试):

var formData = {
  Data: {data: {client: "abc" ...},
  file: fs.createReadStream('testImage_2.jpg'),
};
request.post({url:'<YourUrl>', formData: formData}, function optionalCallback(err, httpResponse, body) {
  if (err) {
    return console.error('upload failed:', err);
  }
  console.log('Upload successful!  Server responded with:', body);
});

关于javascript - Node JS 如何将图像与请求数据一起发布到另一个服务器/api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44302043/

相关文章:

azure - 测试分段文件上传 Azure Function

javascript - javascript可以检测android浏览器是在前台还是后台吗?

javascript - 如何以正确的方式表示两个日期之间的日期数组列表?

node.js - 如何使用 Vue Router 配置 Express 应用程序?

javascript - promise GET 调用休息 api : can't get a valid signature

javascript - 来自 Google Cloud 存储桶的图像不会立即更新

javascript - mongoose findOne() 调用不保存且输出无错误

javascript - 如何限制 highstock.js 中导航器的大小?

python - 使用python从post body请求中提取json数据

php - 从 cUrl 读取 PHP 中的 POST 数据