javascript - nodejs - Carga de la imagen codificada en base64 en Amazon S3 a través de Node.js
nodejs s3 upload (2)
Para las personas que todavía están luchando con este problema. Este es el enfoque que utilicé con aws-sdk nativo.
var AWS = require(''aws-sdk'');
AWS.config.loadFromPath(''./s3_config.json'');
var s3Bucket = new AWS.S3( { params: {Bucket: ''myBucket''} } );
dentro de su método de enrutador: - ContentType debe establecerse en el tipo de contenido del archivo de imagen
buf = new Buffer(req.body.imageBinary.replace(/^data:image///w+;base64,/, ""),''base64'')
var data = {
Key: req.body.userId,
Body: buf,
ContentEncoding: ''base64'',
ContentType: ''image/jpeg''
};
s3Bucket.putObject(data, function(err, data){
if (err) {
console.log(err);
console.log(''Error uploading data: '', data);
} else {
console.log(''succesfully uploaded the image!'');
}
});
El archivo s3_config.json es: -
{
"accessKeyId":"xxxxxxxxxxxxxxxx",
"secretAccessKey":"xxxxxxxxxxxxxx",
"region":"us-east-1"
}
Ayer hice una sesión de codificación nocturna profunda y creé una pequeña aplicación node.js / JS (bueno, en realidad, CoffeeScript, pero CoffeeScript es solo JavaScript, digamos JS).
cual es el objetivo
- el cliente envía un canvas datauri (png) al servidor (a través de socket.io)
- el servidor carga la imagen a amazon s3
el paso 1 está hecho.
el servidor ahora tiene una cadena a la
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACt...
mi pregunta es: ¿cuáles son mis próximos pasos para "transmitir" / subir estos datos a Amazon S3 y crear una imagen real allí?
knox https://github.com/LearnBoost/knox parece una increíble lib para PONER algo en S3, pero lo que me falta es el pegamento entre la cadena de imagen codificada en base64 y la acción de carga real .
Cualquier idea, consejos y comentarios son bienvenidos.
ok, esta es la respuesta de cómo guardar datos de lienzo en un archivo
Básicamente se pierde así en mi código
buf = new Buffer(data.dataurl.replace(/^data:image///w+;base64,/, ""),''base64'')
req = knoxClient.put(''/images/''+filename, {
''Content-Length'': buf.length,
''Content-Type'':''image/png''
})
req.on(''response'', (res) ->
if res.statusCode is 200
console.log(''saved to %s'', req.url)
socket.emit(''upload success'', imgurl: req.url)
else
console.log(''error %d'', req.statusCode)
)
req.end(buf)