bounty将在3天后过期。回答此问题可获得+50的声望奖励。ALex正在寻找规范答案。
我正在使用java为存储在s3中的图像生成一个预签名的url
public String generateDownloadLink(String bucketName, String responseContentDisposition,
String key, int days) {
GetObjectRequest objectRequest =
GetObjectRequest.builder()
.bucket(bucketName)
.responseContentDisposition(responseContentDisposition)
.key(key).build();
GetObjectPresignRequest preSignRequest =
GetObjectPresignRequest.builder()
.signatureDuration(Duration.ofDays(days))
.getObjectRequest(objectRequest)
.build();
PresignedGetObjectRequest presignedRequest = this.s3Presigner.presignGetObject(preSignRequest);
return presignedRequest.url().toString();
字符串
FE(react)然后使用图像标签加载图像,如下图所示。此模态library在全屏打开时也有一个下载按钮-〉a
标签元素。如果按下下载按钮,由于CORS错误,它不会下载任何内容。
这个post解释了原因,尽管这个解决方案不能应用于我的案例。
而且,这种情况时断时续,我不知道在这些情况下有什么不同。有时我可以看到缩略图(也就是库执行初始GET来加载图像并显示它),并且在模态打开后,我可以下载图像(也就是库使用a
标签执行另一个GET)。
铲斗CORS配置
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"GET",
"HEAD"
],
"AllowedOrigins": [
"http://localhost:3000",
"https://<my-host>"
],
"ExposeHeaders": [
"ETag"
],
"MaxAgeSeconds": 3000
}
2条答案
按热度按时间kcwpcxri1#
尝试将
OPTIONS
添加到CORS配置中的AllowedMethods
列表。从浏览器发出的CORS预检请求(在“真实的”请求之前)使用OPTIONS
http方法,因此需要允许该请求。tuwxkamq2#
我的建议是完全开放CORS政策,如果它开始起作用,那么您可以开始改进访问权限,直到您意识到问题所在:
这也是一个关于CORS的好博客,可能会有所帮助:
https://aws.amazon.com/blogs/media/deep-dive-into-cors-configs-on-aws-s3-how-to/