将画布数据上传到s3

Gau*_*hah 15 javascript amazon-s3 cors

现在,亚马逊已经启用,CORS我想知道这是否可行.

可以将html canvas数据(在客户端浏览器上)转换为a something并直接上传到s3吗?

我相信我可以PUT向亚马逊提出要求,但这需要一个File.

我可以获得base64编码的图像数据,甚至Blob可以S3从客户端浏览器中将其保存为图像?

有没有办法转换canvas,File以便我可以提出PUT要求或亚马逊理解Blob并将其保存为图像的方式?

小智 16

这对我有用:

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.');
                    });
Run Code Online (Sandbox Code Playgroud)

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'});
}
Run Code Online (Sandbox Code Playgroud)

  • 我觉得我在这里丢失了一些愚蠢的东西,但`file.name`和`file.type`在哪里被定义?感觉它们应该是文件名的(硬编码)字符串和ContentType的``image/jpeg``? (3认同)
  • 谢谢中li 你救了我的命。 (2认同)

Gau*_*hah 3

有一个旧的 post 方法可以将数据从浏览器上传到 s3

http://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html

然后我使用了这个想法 将数据 URI 转换为文件然后附加到 FormData

与正常情况不同的是POST,可以向亚马逊发送带有表单数据的 xhr 请求,然后就完成了