如何使用针或请求库在Node.js中上传带有PUT请求的二进制体

时间:2015-07-29 22:07:48

标签: javascript node.js node-request needle.js

我正在尝试在亚马逊预先签名的上传网址上编写单元测试,该网址采用原始二进制正文的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);
                });

2 个答案:

答案 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)