一尘不染

通过Node.js将base64编码的图像上传到Amazon S3

node.js

昨天我做了一个深夜的编码会议,并创建了一个小的node.js /
JS(实际上是CoffeeScript,但是CoffeeScript只是JavaScript,所以可以说是JS)应用程序。

目标是什么:

  1. 客户端(通过socket.io)将canvas datauri(png)发送到服务器
  2. 服务器将图像上传到亚马逊s3

步骤1完成。

服务器现在有一个字符串

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACt...

我的问题是: 将数据“流” /上传到Amazon S3并在那里创建实际映像的下一步什么?

knox
https://github.com/LearnBoost/knox似乎是一个很棒的库,可以将内容放入S3中​​,
但是我缺少的是base64编码图像字符串和实际上传操作之间的粘合

欢迎任何想法,指针和反馈。


阅读 272

收藏
2020-07-07

共1个答案

一尘不染

对于仍在努力解决此问题的人们。这是我与本机aws-sdk一起使用的方法。

var AWS = require('aws-sdk');
AWS.config.loadFromPath('./s3_config.json');
var s3Bucket = new AWS.S3( { params: {Bucket: 'myBucket'} } );

在您的路由器方法中:-ContentType应该设置为图像文件的内容类型

  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('succesfully uploaded the image!');
      }
  });

s3_config.json文件是:-

{
  "accessKeyId":"xxxxxxxxxxxxxxxx",
  "secretAccessKey":"xxxxxxxxxxxxxx",
  "region":"us-east-1"
}
2020-07-07