我正在尝试在AWS S3上上传一些媒体
我有两个应用程序:
事情是这样的:
>
前端向后端询问预签名帖子网址
后端调用S3API以获取URL和一些字段(密钥、策略等)
前端从后端获取这些URL,并尝试使用适当的表单数据发布请求
我得到这个错误:
<代码>https://mydomain.or已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源”标头。
这是我的CORS配置:
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"https://mydomain.or",
]
}
]
这是我的预签名POST的后端代码:
this.videoService.presignedPost(this.entity).toPromise().then((uploadData) => { //Where I get my URL and fields
this.fileInput.url = uploadData.url;
for (const [key, value] of Object.entries(uploadData.fields)) {
event.formData.append(key, value)
}
this.fileInput.upload();
});
这是我的预签名POST的后端代码:
createPreSignedPost(entityDb) {
let today = new Date();
console.log(entityDb)
return new Promise((resolve, reject) => {
var params = {
Bucket: BUCKET_NAME,
Fields: {
key: my/key/,
success_action_status: '201',
signature_expiration: (new Date(today.getTime() + 15 * 60000))
}
};
s3.createPresignedPost(params, function (err, data) {
if (err) {
console.error('Presigning post data encountered an error', err);
reject(err)
} else {
console.log('The post data is', data);
resolve({url: data.url, fields: data.fields})
}
});
我尝试的是:
CORS配置是正常的,当我检查curl时,即使方法和主机在我的CORS配置中是允许的,我也会被阻止。
我错过了什么吗?
编辑
因此,我检查了被CORS阻止的请求,并在HTTP客户端中使用了完全相同的表单数据、头等。它在客户端上运行正常,但我的应用程序仍然被阻止。
我相信这与以下任何一个有关:
我尝试了这个确切的用例(在我的例子中没有CORS ),它工作得非常好。为了测试这个用例,我执行了生成预签名URL的Java V2示例。请参见以下代码示例:
https://github . com/AWS docs/AWS-doc-SDK-examples/blob/master/javav 2/example _ code/S3/src/main/Java/com/example/S3/generatepresignedurlanduploadobject . Java
接下来,我获取从此示例生成的 URL,并将其用于从另一个应用发布数据(通常不允许上传)。
回应是200:
查看Java示例,并确保在JS代码中设置了所有设置。
可能什么都不是,但是在“允许的原创”之后有一个无效的逗号:[“https://mydomain.or”,]。这在控制台中 S3 存储桶的 CORS 字段中被标记为无效 JSON。
标题说明一切。这是我的代码; 我使用节点强大的文件。 成功上传后,url变量返回s3 url,类似以下内容; 下面是我的参数 我错过了什么?
所以我已经实现了一个Spring引导JAVA应用程序作为服务器和角作为前端。所以实际上,当我在本地运行这些时,一切都很好。 但是当我为两者构建Docker映像并尝试将它们作为容器进行测试时,我面临着CORS错误。 由于我使用JWT令牌作为安全性,我已经禁用了crsf和默认的Spring Security令牌。所以在这里您可以看到CORS的JAVA配置; 这就是nginx。形态 即使我尝试在同一网络
我正在开发一个特性,使用Angular/预签名url和API Gateway/lambda生成预签名url将文件上传到S3。 我的工作流描述如下: 从模板中获取选定文件 请求我的api(网关/lambda)使用文件名生成预签名的URL。 const body={filename:this.selectedfile.name}const preSignedUrl=await this.http.po
我正试图从vue.js端访问laravel服务器。但它表明 CORS策略阻止从来源“http://localhost:8000/api/registerdoctor”访问位于“http://localhost:8080”的XMLHttpRequest:请求的资源上没有“Access-Control-Allow-Origin”标头。 怎么办?
我知道水桶是存在的。当我通过AWS Web GUI导航到此项目并双击它时,它将打开带有URL的对象,并且运行良好: 所以我认为我在使用SDK时肯定做错了什么。
使用curl或postman,我得到403禁止: Lambda函数具有以下权限: S3桶具有以下CORS规则: