5

Estoy tratando de recuperar una imagen de S3 en el nodo utilizando la siguiente:Node.JS Knox s3 recuperación de imágenes

app.get('/photos', function(req, res, next) { 
var data = ''; 
s3.get('/tmp/DSC_0904.jpg').on('response', function(s3res){ 
    console.log(s3res.statusCode); 
    console.log(s3res.headers); 
    s3res.setEncoding('binary'); 
    s3res.on('data', function(chunk){ 
     data += chunk; 
    }); 
    s3res.on('end', function() { 
     res.contentType('image/jpeg'); 
     res.send(data); 
    }); 
    }).end(); 
}); 

Estoy abierto a sugerencias en cuanto a por qué esto no funciona.

+0

¿Qué se obtiene como respuesta? – mamoo

+0

Obtengo datos, sin embargo, está mutilado de alguna manera, por lo que no es un archivo jpg válido. – jbg

+0

¿Alguna vez resolvió esto? Tengo el mismo problema. – Kit

Respuesta

2

fui capaz de descargar una imagen al hacer las siguientes modificaciones en la devolución de llamada de finalización del evento:

s3res.on('end', function() { 
    res.contentType('image/jpeg'); 
    res.write(data, encoding='binary') 
    res.end() 
}); 

que estaba teniendo los mismos problemas que el cartel original. Sospeché que, desde que configuramos la codificación en el búfer entrante como binario, necesitábamos hacer lo mismo en el flujo de salida. Después de algunas investigaciones encontré el método de escritura que exceptúa un tipo de codificación como parámetro.

1

Puede utilizar AwsSum ya que está completamente presentado y actualizado. También cuenta con un directorio examples /, que tiene una carga de ejemplos de Amazon S3 allí:

Hay también un ejemplo de exactamente lo que necesita en el repositorio de nodos awssum-scripts los cuales está separado del nodo-awssum uno:

Avísame si te encuentras bien o si necesitas ayuda. Descargo de responsabilidad: soy el autor de AwsSum. :)

0

Lo utilizo para conseguir mis imágenes, y funciona bastante bien ..

// Create the new file using fs 
var new_file = fs.createWriteStream(destination_file); 

// Now grab the file from s3 
aws_connection.getFile(f, function(err, res) { 
    if(err) return err; 

    res.on('data', function(chunk) { 
     new_file.write(chunk); 
    }); 
    res.on('end', function(chunk) { 
     new_file.end(); 
    }); 
}); 
Cuestiones relacionadas