有人可以告诉我如何使用 AWS JavaScript 将 Canvas 图像上传到 S3 服务器吗?
我在使用 JavaScript SDK 将图像上传到 Amazon S3 服务器时遇到了一些麻烦,需要实现以下目标。
-> 在 HTML5 Canvas 上创建图像并在 JavaScript 中调整图像大小。
-> 然后将图像上传到 Amazon S3 服务器。
但问题是:
*) 在将图像上传到 S3 服务器时,它是在 S3 上上传图像像素信息而不是图像。
因此,在 S3 浏览器预览中,使用以下代码显示图像流而不是图像。
此外,AWS Javascript 支持以下格式的 Body 缓冲区、类型化数组、Blob、字符串、ReadableStream。
代码如下:
HTML代码
<canvas id="myCanvas" width="800" height="800" style="background-color: greenyellow;">Your browser doesn't support html5! Please download the latest version.
</canvas>
<input type="button" id="upload-button" value="Upload to S3" />
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.0.4.min.js"></script>
<script type="text/javascript">
AWS.config.update({ accessKeyId: 'ACCESSKEY', secretAccessKey: 'SECRETKEY' });
AWS.config.region = 'ap-southeast-1';
$(function () {
$("#upload-button").click(OnUpload);
});
function OnUpload(){
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
var img = new Image();
img.src = 'Images/IMG_0001.JPG';
img.onload = function () {
<!--image resize -->
var MAX_WIDTH = 200;
var MAX_HEIGHT = 200;
var width = img.width;
var height = img.height;
if (width > height) {
if (width > MAX_WIDTH) {
height *= MAX_WIDTH / width;
width = MAX_WIDTH;
}
} else {
if (height > MAX_HEIGHT) {
width *= MAX_HEIGHT / height;
height = MAX_HEIGHT;
}
}
canvas.width = width;
canvas.height = height;
ctx.drawImage(img, 0, 0, width, height);
<!--image resize end-->
var imageData = ctx.getImageData(0, 0, width, height);
var typedArray = imageData.data;
var bucket = new AWS.S3({ params: { Bucket: 'bucketName' } });
var results = document.getElementById('results');
results.innerHTML = '';
var params = { Key: "sample.png", ContentType: "image/png", Body: typedArray };
bucket.putObject(params, function (err, data) {
results.innerHTML = err ? 'ERROR!' : 'UPLOADED.';
});
}
}
</script>
有人可以告诉我怎么做吗? 提前致谢...
最佳答案
对于仍然面临问题的人,这将节省一些时间:
var canvas = document.getElementById("imagePreviewChatFooter");
var dataUrl = canvas.toDataURL("image/jpeg");
var blobData = dataURItoBlob(dataUrl);
var fileName = file.name;
var params = {Key: fileName, ContentType: file.type, Body: blobData};
bucket.upload(params, function (err, data) {
console.log(data);
console.log(err ? 'ERROR!' : 'UPLOADED.');
});
和
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/jpeg'});
}
关于javascript - 将 Canvas 图像上传到 S3 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24694629/