我正在尝试在亚马逊预先签名的上传网址上编写单元测试,该网址采用原始二进制正文的PUT请求。
查看针和请求库的示例,它们都使用表单数据示例。有人可以使用任何一个库给我一个例子,它会将一个本地文件作为原始二进制文件发送到请求正文中吗?
请求库 https://github.com/request/request
针头库 https://github.com/tomas/needle
var filename = 'bunny.jpg';
var url = Amazon.getUploadUrl(filename);
var data = {
file: __dirname + '/' + filename,
content_type: 'image/jpeg'
};
var file = fs.createReadStream(__dirname + '/' + filename);
var request = require('needle');
request
.put(url, data, function(err, resp) {
console.log(resp.body.toString('utf-8'));
if (resp.statusCode !== 200) {
done(new Error(resp.statusMessage));
}
else
done(err);
});
答案 0 :(得分:1)
我使用promise-request发送带有PUT请求的二进制正文,但您可以使用请求库或针库调整此代码。
// Don't put encoding params in readFile function !
fs.readFile("example.torrent", function (err, file) {
if (err) {
throw err;
}
var r = request({
method: 'PUT',
uri: 'https://api.mywebsite.com/rest/1.0/addFile',
headers: {
"Content-Type": "application/octet-stream" // Because binary file
},
json: true // Because i want json response
});
r.body = file; // Put the file here
r.then(function (response) {
console.log("success", response);
}).catch(function (error) {
console.log("error", error);
});
});
答案 1 :(得分:0)
您需要设置的只是Content-Type
标头
使用axios
lib
return axios({
method: "put",
url: your_url,
headers: { "Content-Type": "application/octet-stream" },
data: Buffer.from(blob.data)
});
bolb
的类型为File(req.body.files)