【发布时间】:2014-06-27 00:12:00
【问题描述】:
我正在将画布的 base64data 发送到 node.js 脚本。我需要将base64data 作为图像存储到s3bucket。有什么方法可以实现吗?
【问题讨论】:
-
可能这就是你要找的。 [uploading-base64-encoded-image-to-s3][1] [1]: stackoverflow.com/questions/7511321/…
我正在将画布的 base64data 发送到 node.js 脚本。我需要将base64data 作为图像存储到s3bucket。有什么方法可以实现吗?
【问题讨论】:
您可以使用 AWS putObject 方法发送 base64 数据,如下所示
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./s3_config.json');
var s3Bucket = new AWS.S3( { params: {Bucket: 'myBucket'} } );
var imageBase64Data='Your base64 code '
s3Bucket.putObject(imageBase64Data, function(err, data){
if (err) {
console.log(err);
console.log('Error uploading data: ', data);
} else {
console.log('succesfully uploaded the image!');
}
});
【讨论】:
创建函数,将数据 URI(64 位编码字符串)解码为字符串(这里我创建了 dataURItoBlob() 函数),解码后返回字符串。
将该字符串传递到 S3 上传函数的正文中。
var myDataUri = "data:image/jpg;base64,JVBERi0xLjMKMyAwIG9iago8PC9UeXBlIC9QYW..."
var myFile=dataURItoBlob(myDataUri);
function dataURItoBlob(dataURI) {
var binary = atob(dataURI.split(',')[1]);
var array = [];
for (var i = 0; i < binary.length; i++) {
array.push(binary.charCodeAt(i));
}
return new Blob([new Uint8Array(array)], {
type: 'image/jpg'
});
}
if (myFile)) {
results.innerHTML = '';
var params = {
Key: fileName+'.jpg',
ContentType: 'image/jpg',
Body: myFile
};
bucket.upload(params, function(err, data) {
results.innerHTML = err ? 'ERROR!' : 'UPLOADED.: ' + file;
});
} else {
results.innerHTML = 'Nothing to upload.';
}
【讨论】: