2

我正在尝试在亚马逊预签名上传 URL 上编写单元测试,该 URL 接受带有原始二进制正文的 PUT 请求。

查看 needle 和 request 库的示例,它们都使用表单数据示例。有人可以给我一个使用任一库的示例,该库将本地文件作为请求正文中的原始二进制文件发送吗?

请求库 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);
    });
4

2 回答 2

2

我使用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);
    });
});
于 2016-01-18T18:29:20.457 回答
0

您需要设置的只是Content-Type标头使用axioslib

return axios({
    method: "put",
    url: your_url,
    headers: { "Content-Type": "application/octet-stream" },
    data: Buffer.from(blob.data)
});

文件类型在哪里bolb(req.body.files)

于 2020-04-30T11:26:37.697 回答