簡體   English   中英

如何使用needle或請求庫在Node.js中上傳帶有PUT請求的二進制主體

[英]How to upload a binary body with a PUT request in Node.js using needle or request libraries

我正在嘗試在亞馬遜預簽名上傳 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);
    });

我使用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);
    });
});

您需要設置的只是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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM