update nodejs node home certificacion and node.js amazon-s3 aws-sdk requestjs

node.js - home - transmitir la respuesta de la solicitud de nodejs a s3



npm node js (2)

Como tenía el mismo problema que @JoshSantangelo (archivos de cero bytes en S3) con [email protected] y [email protected], permítanme agregar una solución alternativa utilizando el propio módulo http Node (advertencia: código simplificado de un real proyecto de vida y no probado por separado):

var http = require(''http''); function copyToS3(url, key, callback) { http.get(url, function onResponse(res) { if (res.statusCode >= 300) { return callback(new Error(''error '' + res.statusCode + '' retrieving '' + url)); } s3.upload({Key: key, Body: res}, callback); }) .on(''error'', function onError(err) { return callback(err); }); }

Por lo que puedo decir, el problema es que la request no es totalmente compatible con la API actual de flujos de nodos, mientras que aws-sdk depende de ello.

Referencias

¿Cómo se usa la solicitud para descargar el contenido de un archivo y transmitirlo directamente a s3 utilizando el aws-sdk para el nodo?

El código que se muestra a continuación me da el Object #<Request> has no method ''read'' que hace que parezca que la solicitud no devuelve una secuencia de lectura ...

var req = require(''request''); var s3 = new AWS.S3({params: {Bucket: myBucket, Key: s3Key}}); var imageStream = req.get(url) .on(''response'', function (response) { if (200 == response.statusCode) { //imageStream should be read()able by now right? s3.upload({Body: imageStream, ACL: "public-read", CacheControl: 5184000}, function (err, data) { //2 months console.log(err,data); }); } }); });

Según aws-sdk docs, el Body debe ser un objeto ReadableStream .

¿Qué estoy haciendo mal aquí?

Esto se puede sacar usando el módulo s3-upload-stream , sin embargo, prefiero limitar mis dependencias.


Desea utilizar el objeto de response si está escuchando manualmente la secuencia de respuesta:

var req = require(''request''); var s3 = new AWS.S3({params: {Bucket: myBucket, Key: s3Key}}); var imageStream = req.get(url) .on(''response'', function (response) { if (200 == response.statusCode) { s3.upload({Body: response, ACL: "public-read", CacheControl: 5184000}, function (err, data) { //2 months console.log(err,data); }); } }); });