将 div 中的 amazon s3 图像转换为画布时出现跨源问题

Posted

技术标签:

【中文标题】将 div 中的 amazon s3 图像转换为画布时出现跨源问题【英文标题】:Cross origin issue occuring while converting amazon s3 images in div to canvas 【发布时间】:2017-11-01 02:37:22 【问题描述】:

我正在使用htm2canvas 将带有图像的特定 div 转换为画布。当图像是本地图像时,这是有效的。我遇到了这个问题

“从源 'http://mywebsite.com' 访问位于 'https://mybucket.s3.amazonaws.com/B008C4GFP0.jpg' 的图像已被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。源 'http://mywebsite.com ' 因此不允许访问。”

当图像来自亚马逊时。

我正在转换到画布上的 Div

<div> <img id="img1" src="https://mybucket.s3.amazonaws.com/B008C4GFP0.jpg" style="width:100%; height:100%;position:relative;"> <img id="img2" src="https://mybucket.s3.amazonaws.com/B00HXT858A.jpg" style="width:100%; height:100%;position:relative;"> </div>

My html to canvas code is

 ` 

    html2canvas(element, 
            useCORS: true,
            allowTaint:true,
              onrendered: function (canvas) 
                getCanvas = canvas;
                var content = $("#TempPublishedItems").html();
                var image = getCanvas.toDataURL("image/jpg");
                var image1 = document.createElement("IMG");
                image1.src = getCanvas.toDataURL("image/jpg");
              ,
              proxy: 'https://html2canvas.appspot.com/query',
              logging: true
            );

`

为了解决这个跨源问题,我在 amazon s3 的 CORS 配置中尝试了这段代码

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

请帮助我解决亚马逊 s3 图像的跨源问题。

【问题讨论】:

【参考方案1】:

不要使用 allowTaint 或 useCORS 选项。

在此处查看使用和测试下的自述文件:

https://github.com/zeusstl/html2canvas-proxy-nodejs

【讨论】:

【参考方案2】:

我在 Amazon S3 上遇到了同样的问题。我将 Amazon S3 中的 AllowedHeader CORS 配置从 &lt;AllowedHeader&gt;Authorization&lt;/AllowedHeader&gt; 更改为 &lt;AllowedHeader&gt;*&lt;/AllowedHeader&gt;,这对我有用,如下所示。我在这个 jsfiddle 中尝试过:http://jsfiddle.net/6FZkk/1066/

希望它对你有用。

【讨论】:

以上是关于将 div 中的 amazon s3 图像转换为画布时出现跨源问题的主要内容,如果未能解决你的问题,请参考以下文章

Amazon S3 .NET:上传 base64 图像数据?

将图像从 Android 上传到 Amazon S3?

将 base64 图像数据上传到 Amazon S3

Amazon S3 中的 403 禁止问题

PHP 将远程图像保存到 Amazon S3

将图像上传到 Amazon S3 时出现 NotAuthorizedException