如何将画布数据uri上传到amazon s3服务器

时间:2015-11-18 12:14:08

标签: javascript node.js amazon-s3 hapijs

现在,我已经传递了画布数据URI字符串

  

(数据:图像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAAUAAAADwCAYAAABxLb1rAAAgAElEQVR .....   )

到我的hapi(NodeJS)服务器。

我的问题是:

我接下来的步骤是什么?流式传输" /将此数据上传到Amazon S3并在那里创建实际图像?

2 个答案:

答案 0 :(得分:0)

在将对象发送到s3之前,必须将base64转换为缓冲区并在发送之后,例如:

var buf = new Buffer(b64string, 'base64');
s3.putObject({/*some  params*/, Body: buf}, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

在此之后,您将数据发送到s3,您可以打开图像而无需解码。

祝你好运!

答案 1 :(得分:0)

  1. 将您的数据URI存储在vaiable中。
  2. 创建将数据URI(64位编码字符串)解码为字符串的函数(这里我创建了 dataURItoBlob()函数)并在解码后返回字符串
  3. 将该字符串传递到 S3上传功能的正文

    var myDataUri = "data:application/pdf;base64,JVBERi0xLjMKMyAwIG9iago8PC9UeXBlIC9QYW..."
    
    var myFile=dataURItoBlob(myDataUri);
    
    function dataURItoBlob(dataURI) {
       console.log('1: ',dataURI);
       var binary = atob(dataURI.split(',')[1]);
       var array = [];
       console.log('2: ',binary.length);
       for (var i = 0; i < binary.length; i++) {
          array.push(binary.charCodeAt(i));
       }
      return new Blob([new Uint8Array(array)], {
      type: 'application/pdf'
      });
    }
    
     if (myFile)) {
       results.innerHTML = '';
       var params = {
         Key: new Date().getTime() + '.pdf',
         ContentType: 'application/pdf',
         Body: myFile
       };
    
      bucket.upload(params, function(err, data) {
        results.innerHTML = err ? 'ERROR!' : 'UPLOADED.: ' + file;
      });
     } else {
     results.innerHTML = 'Nothing to upload.';
    }