canvas - 我应该将 CORS 设置设置为什么以及在哪里设置,这样我的 Canvas 就不会被污染?

标签 canvas amazon-s3 html5-canvas cors

我有一个大 Canvas ,其中包含所有来 self 的 S3 存储桶的图标和图片。当我尝试上传它(运行 toDataUrl)时,Chrome 提示

Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

我以前遇到过这个错误,但当时我的解决方案是将所有图像托管在本地。然而,这一次是不可能的,所以我需要正面解决这个问题。

谷歌搜索这个问题,发现了很多关于 CORS 的内容,但我不明白。

我已在 S3 存储桶中尝试了以下设置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedOrigin>Anonymous</AllowedOrigin>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>HEAD</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

但是,这不起作用。

我的直觉告诉我我还必须更改服务器中的某些内容,否则此安全要求的目的是什么?

那么我应该改变什么,以及哪里,这样我的 Canvas 就不会再被污染了?

最佳答案

您的 CORS 配置应该良好,最少需要的是

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
    </CORSRule>
</CORSConfiguration>

但是,您需要的是设置您的 <img> crossOrigin attribute"anonymous" .

此外,检查 s3 上的图像是否已公开(应该将受让人 Everyone 设置为 Open/Download ),并且您使用 Properties 中提供的链接。图像文件的选项卡(类似于 https://s3.yourRegion.amazonaws.com/userName/Folder/file.png )。

最后,更改存储桶的 CORS 设置后,您必须清除浏览器的缓存,否则浏览器不会向服务器发出新请求,并且会使用已缓存的不安全版本。

关于canvas - 我应该将 CORS 设置设置为什么以及在哪里设置,这样我的 Canvas 就不会被污染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35002392/

相关文章:

javascript - 使用 Web Workers 使用 native Canvas 函数进行绘图

android - Canvas.drawText ("+5") 在 Android 中根本不显示 "+"符号?

Android Amazon S3 上传视频卡住等待

javascript - kinetic.js stage.getDragLayer 方法

ruby-on-rails - 回形针和 S3 : Multiple thumbnail sizes not saving

go - 如何在 S3 中保存数据流? aws-sdk-go 示例不起作用?

canvas - DropZoneJS + JavascriptLoadImage : rotate image?

javascript - jquery,调整 Canvas 大小而不缩放

HTML5 Canvas 或 SVG 世界地图

android canvas 滚动最简单的形式