gpt4 book ai didi

javascript - Amazon S3 奇怪的 CORS 行为 : No 'Access-Control-Allow-Origin' header is present on the requested resource

转载 作者:行者123 更新时间:2023-12-03 00:16:31 27 4
gpt4 key购买 nike

我正在亚马逊 S3 上存储图像。

我对我的存储桶使用此 CORS 配置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>https://www.monteurzimmer-1a.de</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

我也有存储桶规则:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}

问题是:

我的图像通常都是可见的,没有任何问题,在我添加一个脚本来根据图像的 EXIF 数据旋转图像后出现错误。

现在,如果您第一次访问该页面(图像旋转的页面),您仍然可以看到图像,但旋转未应用,并且我在每个图像的控制台中看到错误:... has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

但是如果您重新加载页面一次,错误就会消失并应用旋转。您可以使用隐身模式重现该问题。

访问this page在隐身模式下。可以看到图像,但旋转错误,错误出现在控制台中。按 F5,错误消失,旋转已应用。

我认为这与缓存有关,但轮换脚本不在 S3 上。

这就是我应用旋转的方式:

<img class="display-none" id="room_image_{{ loop.index }}"
onload="rotate_image(this)" alt="Zimmer Bild"
src="https://s3.eu-central-1.amazonaws.com/my-bucket/userimages/{{ image.path }}">

这是 JS 部分:

function adjust_to_container($img, deg) {
//console.log($img);
//var parentHeight = $img.parent().height();
var parentHeight = $img.parentElement.clientHeight;

//console.log(parentHeight);
if (deg == 90 || deg == 270) {
$img.style.maxWidth = parentHeight + "px";
//$img.css("max-width", parentHeight + "px");
}
}

function rotate_image($img) {
EXIF.getData($img, function() {
console.log('Exif=', EXIF.getTag($img, "Orientation"));

switch(parseInt(EXIF.getTag($img, "Orientation"))) {
case 2:
//$img.addClass('flip');
$img.classList.add("flip");
adjust_to_container(this, 180);
break;
case 3:
//$img.addClass('rotate-180');
$img.classList.add("rotate-180");
adjust_to_container(this, 180);
break;
case 4:
//$img.addClass('flip-and-rotate-180');
$img.classList.add("flip-and-rotate-180");
adjust_to_container(this, 180);
break;
case 5:
//$img.addClass('flip-and-rotate-270');
$img.classList.add("flip-and-rotate-270");
adjust_to_container(this, 270);
break;
case 6:
//$img.addClass('rotate-90');
$img.classList.add("rotate-90");
adjust_to_container(this, 90);
break;
case 7:
//$img.addClass('flip-and-rotate-90');
$img.classList.add("flip-and-rotate-90");
adjust_to_container(this, 90);
break;
case 8:
//$img.addClass('rotate-270');
$img.classList.add("rotate-270");
adjust_to_container(this, 270);
break;
}
});
}

exif.js该脚本加载在 HTML <HEAD> 中因为它们必须在图像加载之前就存在。

知道为什么这会触发 CORS 问题吗?

编辑

我认为这与 EXIF.js 有关。它使用 XMLHttpRequest来处理图像。这是exit.js I use :

编辑

这个问题好像只出现在chrome浏览器上,说明CORS配置没问题?

最佳答案

我在图像标签上添加了 crossorigin="anonymous" ,看来错误已经消失了。

<img class="display-none" id="room_image_{{ loop.index }}"
onload="rotate_image(this)" crossorigin="anonymous" alt="Zimmer Bild"
src="https://s3.eu-central-1.amazonaws.com/my-bucket/userimages/{{ image.path }}">

一个小解释可以在 accepted answer here 中找到。 .

关于javascript - Amazon S3 奇怪的 CORS 行为 : No 'Access-Control-Allow-Origin' header is present on the requested resource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54513634/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com