如何将canvas数据上传到亚马逊S3服务器

现在,我已经传递了canvas数据URIstring

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

到我的hapi(NodeJS)服务器。

我的问题是:

我的下一个步骤是将数据“stream”上传到Amazon S3并在那里创build一个实际的图像?

在将对象发送给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. 将您的数据URI存储在一个可用的。
  2. 创build函数解码您的数据的URI(64位编码的string)string(这里我已经创builddataURItoBlob()函数)解码后返回string
  3. 通过S3上传函数 体内的string

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