2015-05-27 79 views
0

我有興趣將映像數據(存儲在Amazon S3上)發佈到REST端點。圖像數據看起來是返回緩衝區:Node.js中的POST緩衝區數據

var request = require('request'); 
var s3 = new AWS.S3(); 

s3.getObject({Bucket: bucket, Key: key}, function(err, data) { 
    console.log(data.Body); 
    // <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 ... 

當我嘗試使用請求庫上傳緩衝區:

request.post('https://example.com', {'upload_file': data.Body}); 

它爆炸,因爲它顯然試圖URI進行編碼:

/node_modules/request/node_modules/qs/lib/stringify.js:40 
     return [encodeURIComponent(prefix) + '=' + encodeURIComponent(obj)]; 
               ^
URIError: URI malformed 
    at encodeURIComponent (native) 
    at Object.internals.stringify (/node_modules/request/node_modules/qs/lib/stringify.js:40:52) 
    at Object.module.exports [as stringify] (/node_modules/request/node_modules/qs/lib/stringify.js:93:38) 
    at Request.form (/node_modules/request/request.js:1320:20) 
    at Request.init (/node_modules/request/request.js:503:10) 
    at new Request (/node_modules/request/request.js:272:8) 
    at request (/node_modules/request/index.js:56:10) 
+0

我不認爲這是由請求模塊的支持。您可能想嘗試使用內置http模塊來發送它。 – igelineau

回答

0

我最終解決了這個問題,轉移到'restler'NPM包並使用(可悲的)未記錄的功能。所以下面:

request.post('https://example.com', {'upload_file': data.Body}); 

變成了:

s3.getObject({Bucket: bucket, Key: key}, function(err, data) { 
    var form = { 
    file_name: key, 
    upload_file: rest.data(key, data.ContentType, data.Body) 
    }; 
    var opts = { 
    data: form, 
    multipart: true 
    }; 
    rest.post('example.com', opts).on('complete', function(results, response) { 
    //...handle success 
    }) 
});