putobject nodejs node listobjects deleteobjects aws javascript node.js amazon-web-services amazon-s3 fs

javascript - nodejs - Descargue el archivo de la URL y cárguelo en AWS S3 sin guardar-node.js



s3 putobject params (2)

Estoy escribiendo una aplicación que descarga imágenes de una URL y luego las carga en un contenedor S3 utilizando el aws-sdk .

Pervioso acababa de descargar imágenes y guardarlas en un disco como este.

request.head(url, function(err, res, body){ request(url).pipe(fs.createWriteStream(image_path)); });

Y luego subiendo las imágenes a AWS S3 como esta

fs.readFile(image_path, function(err, data){ s3.client.putObject({ Bucket: ''myBucket'', Key: image_path, Body: data ACL:''public-read'' }, function(err, resp) { if(err){ console.log("error in s3 put object cb"); } else { console.log(resp); console.log("successfully added image to s3"); } }); });

Pero me gustaría omitir la parte donde guardo la imagen en el disco. ¿Hay alguna manera de pipe la respuesta de la request(url) a una variable y luego subirla?


Aquí hay algunos javascript que hacen esto muy bien:

var options = { uri: uri, encoding: null }; request(options, function(error, response, body) { if (error || response.statusCode !== 200) { console.log("failed to get image"); console.log(error); } else { s3.putObject({ Body: body, Key: path, Bucket: ''bucket_name'' }, function(error, data) { if (error) { console.log("error downloading image to s3"); } else { console.log("success uploading to s3"); } }); } });


Esto es lo que hice y funciona muy bien:

const request = require(''request-promise'') const AWS = require(''aws-sdk'') const s3 = new AWS.S3() const options = { uri: uri, encoding: null }; async load() { const body = await request(options) const uploadResult = await s3.upload({ Bucket: ''bucket_name'', Key : path, Body : body, }).promise() }