我需要一些帮助来配置 R2 以进行本地开发。我需要能够将 R2 预签名 URL 与 localhost 一起使用。
目前,从本地主机获取预签名 URL 时,我不断遇到 CORS 问题:
No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
但是,从我的托管域中提取工作完全正常,没有 CORS 问题。
检查请求后,从
Access-Control-Allow-Origin:*
获取时,R2 的响应确实包含 mydomain.com
标头,但从 localhost
获取时不包含它。
因为这仅适用于开发人员,所以我尝试使用
no-cors
模式,但这不适用于 PUT 请求。
阅读支持论坛和博客文章后,我的 R2 CORS 政策如下:
[
{
"AllowedOrigins": [
"http://localhost:3000",
"https://localhost:3000",
"*"
],
"AllowedMethods": [
"GET",
"HEAD",
"PUT",
"DELETE"
],
"AllowedHeaders": [
"Content-Type",
"Access-Control-Allow-Origin",
"Referer",
"User-Agent"
],
"ExposeHeaders": [
"Content-Type",
"Access-Control-Allow-Origin",
"ETag"
],
"MaxAgeSeconds": 3600
}
]
我还尝试在 https 上运行 localhost,以防万一但无济于事:((对于感兴趣的人使用
mkcert
)
我现在没主意了^^
任何帮助或建议将不胜感激!
找到了使用浏览器扩展来更改请求标头的解决方案。
对于 Google Chrome,我发现 this 运行得很好。只需确保请求发生时扩展程序已打开即可。
要让您的预签名 URL 和 R2 绑定的工作人员定位同一个存储桶,您需要运行
wrangler dev --remote
并将 preview_bucket_name
添加到 wrangler.toml
,如下所示:
// wrangler.toml
[...]
[[r2_buckets]]
binding = "R2_BUCKET"
bucket_name = "my-r2"
preview_bucket_name = "my-r2" # same as bucket_name