Saltar al contenido

Subir imagen codificada en base64 a Amazon S3 a través de Node.js

Te recomendamos que revises esta solución en un ambiente controlado antes de pasarlo a producción, un saludo.

Solución:

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 = Buffer.from(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('successfully uploaded the image!');
      
  );

archivo s3_config.json:


  "accessKeyId":"xxxxxxxxxxxxxxxx",
  "secretAccessKey":"xxxxxxxxxxxxxx",
  "region":"us-east-1"

ok, esta es la respuesta cómo guardar datos de lienzo en un archivo

básicamente se ve 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)

Aquí está el código de un artículo que encontré, publicando a continuación:

const imageUpload = async (base64) => 

  const AWS = require('aws-sdk');

  const  ACCESS_KEY_ID, SECRET_ACCESS_KEY, AWS_REGION, S3_BUCKET  = process.env;

  AWS.config.setPromisesDependency(require('bluebird'));
  AWS.config.update( accessKeyId: ACCESS_KEY_ID, secretAccessKey: SECRET_ACCESS_KEY, region: AWS_REGION );

  const s3 = new AWS.S3();

  const base64Data = new Buffer.from(base64.replace(/^data:image/w+;base64,/, ""), 'base64');

  const type = base64.split(';')[0].split('/')[1];

  const userId = 1;

  const params = 
    Bucket: S3_BUCKET,
    Key: `$userId.$type`, // type is not required
    Body: base64Data,
    ACL: 'public-read',
    ContentEncoding: 'base64', // required
    ContentType: `image/$type` // required. Notice the back ticks
  

  let location = '';
  let key = '';
  try 
    const  Location, Key  = await s3.upload(params).promise();
    location = Location;
    key = Key;
   catch (error) 
  

  console.log(location, key);

  return location;



module.exports = imageUpload;

Lea más: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property

Créditos: https://medium.com/@mayneweb/upload-a-base64-image-data-from-nodejs-to-aws-s3-bucket-6c1bd945420f

Al final de la post puedes encontrar las anotaciones de otros gestores de proyectos, tú todavía tienes la habilidad dejar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *