我正在尝试将我的Node JS应用程序中的图像发布到另一个REST API。我有Mongo DB中的图像(作为二进制数组数据),由Node JS读取,然后应该发布到另一个API。
我面临的问题是如何与图像一起发送请求数据?我有这个原始数据(采用JSON格式),应与图像一起发布:
{"data":{"client":"abc","address": "123"},"meta":{"owner": "yourself","host": "hostishere"}}
我需要使用'request'模块执行此操作。如果有更好的帮助,我可以使用'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();
更新时间:06/06/2017
所以,我碰巧与提供终点的REST团队交谈,发现数据应该采用以下特定格式发送。以下是成功请求的快照。有人可以帮助我使用我应该使用的Node代码吗?我尝试过form-data包,但是得到了同样的错误:
答案 0 :(得分:7)
如果你能控制其他API"您也可以将图像作为二进制数据的base64表示形式包含在post-body中(并在API端解码)
回答更新06/06/2017:
根据屏幕截图,API需要multipart / formdata。 使用"请求" -module的此类请求记录在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);
});
答案 1 :(得分:5)
如果您使用JSON数据将body
添加到您的请求中,您应该能够发送它:
var options = {
host: 'hostname.com',
port: 80,
path: '/api/content',
method: 'POST',
headers:{
'Content-Type' : 'multipart/form-data'
},
body: {
"data": {"client":"abc","address": "123"},
"meta":{"owner": "yourself","host": "hostishere"}
}
};
我不明白为什么setTimeout
res.send
与res
时没有定义任何<div style="position: relative;" *ngIf="arrayRange != []">
<div id="myCarousel" class="carousel slide" data-ride="carousel">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#myCarousel" *ngFor="let x of arrayRange;let i = index" [attr.data-slide-to]="i" ngClass="i == 0 ? 'active' : ''"></li>
</ol>
<!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox">
<div *ngFor="let j of arrayRange; let k = index" [ngClass]="k == 0 ? 'item active' : 'item'">
<img src={{imagesArray[k]}} alt="Event Image">
</div>
</div>
<!-- Left and right controls -->
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
</div>
变量的原因。