2015-05-27 2 views
0

Я заинтересован в отправке данных изображения (хранящихся на Amazon S3) в конечную точку REST. Данные изображения, кажется, возвращается в качестве буфера:Данные буфера POST в Node.js

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

Я решил это решить, перейдя в пакет NPM «restler» и используя (к сожалению) недокументированную функцию. Таким образом, следующее:

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 
    }) 
}); 
Смежные вопросы