gpt4 book ai didi

javascript - XMLHttpRequest 和 S3,CORS 错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:30:54 26 4
gpt4 key购买 nike

我将我的照片托管在 S3 存储桶上。我为 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>
<ExposeHeader>Accept-Ranges</ExposeHeader>
<ExposeHeader>Content-Range</ExposeHeader>
<ExposeHeader>Content-Encoding</ExposeHeader>
<ExposeHeader>Content-Length</ExposeHeader>
<ExposeHeader>Access-Control-Allow-Origin</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

在我的 html 页面中,我试图保存图像,所以我使用了库:https://github.com/tsayen/dom-to-image

domtoimage.toBlob(document.getElementById('my-node'))
.then(function (blob) {
window.saveAs(blob, 'my-node.png');
});

我收到 CORS 错误:

XMLHttpRequest cannot load http://s3/bucket/path/image.png. No 'Access-Control-Allow-Origin' header is present on the requested resource.

欢迎任何建议。

最佳答案

经过长时间的调试,我找到了核心问题。所有 S3 CORS 配置都已更正,与 S3 无关。问题来自浏览器缓存。这种烦人的缓存阻止了 S3 响应 Access-Control-Allow-Origin' header 作为响应,这就是它导致错误的原因。

解决方案:(这是一个 hacky 解决方案,但它有效)我在dom-to-image.js的getAndEncode方法中添加了一行代码来防止浏览器缓存。

function getAndEncode(url) {
...
url += "?"+(new Date()).getTime(); // this line of code made magic.

return new Promise(function (resolve) {
....
request.open('GET', url, true);
...

同样,这是一种 hacky 方式,我仍在寻找更好的解决方案。

关于javascript - XMLHttpRequest 和 S3,CORS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43345708/

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