如何将画布数据 uri 上传到亚马逊 s3 服务器

Posted

技术标签:

【中文标题】如何将画布数据 uri 上传到亚马逊 s3 服务器【英文标题】:How to upload canvas data uri to amazon s3 server 【发布时间】:2016-02-20 04:09:02 【问题描述】:

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

(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAADwCAYAAABxLb1rAAAgAElEQVR..... )

到我的 hapi (NodeJS) 服务器。

我的问题是:

我接下来要如何“流式传输”/将这些数据上传到 Amazon S3 并在那里创建实际图像?

【问题讨论】:

所以真正的问题是,你如何从 nodejs 上传到亚马逊 S3。 您需要从这个base64图像创建一个流并将该流上传到S3 如果您搜索 SO 时已经找到 ***.com/questions/7511321/… 和 ***.com/questions/5867534/… ?让我猜你甚至没有搜索。 【参考方案1】:
    将您的数据 URI 存储在一个变量中。 创建将数据 URI(64 位编码字符串)解码为字符串的函数(这里我创建了 dataURItoBlob() 函数),解码后返回字符串

    将该字符串传递给 S3 上传函数body

    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.';
    
    

【讨论】:

【参考方案2】:

在发送对象到 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,您将无需解码即可打开图像。

祝你好运!

【讨论】:

以上是关于如何将画布数据 uri 上传到亚马逊 s3 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 axios 将文件上传到亚马逊 s3 存储桶?

如何使用 Codeigniter/PHP 将文件上传到亚马逊 S3?

如何将带有子文件夹的文件夹上传到亚马逊 s3?

如何使用 django-storages 将图像上传到亚马逊 S3?在管理员中上传有效,但在网站表单中无效

如何仅使用 JavaScript 将 base64 编码的图像数据上传到 S3?

使用 multer-s3 nodejs 将图像上传到亚马逊 s3