Angularjs Amazon S3-错误和不安全的响应
这个问题已经被问过了,但是这个答案对我没有帮助,因为我知道这个URL是正确的,因为它指向的是美国标准的URL,在亚马逊指南中有详细说明 因此,我试图通过angular libraryng file upload将一个文件上传到我的bucket。我相信我已经正确地设置了铲斗:Angularjs Amazon S3-错误和不安全的响应,angularjs,amazon-web-services,angular-file-upload,Angularjs,Amazon Web Services,Angular File Upload,这个问题已经被问过了,但是这个答案对我没有帮助,因为我知道这个URL是正确的,因为它指向的是美国标准的URL,在亚马逊指南中有详细说明 因此,我试图通过angular libraryng file upload将一个文件上传到我的bucket。我相信我已经正确地设置了铲斗: 存储桶名称为ac.testing 此服务器的CORS配置: <?xml version="1.0" encoding="UTF-8"?> < CORSConfiguration xmlns="http
- 存储桶名称为ac.testing
- 此服务器的CORS配置:
现在返回的错误是: 编辑3 环顾四周,amazon不喜欢的标题似乎正在添加到请求中。我在ng文件上传上试过了,但在我自己的机器上没有。解决此问题的方法似乎是删除以下标题:<?xml version="1.0" encoding="UTF-8"?> < CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> < CORSRule> < AllowedOrigin>*</AllowedOrigin> < AllowedMethod>POST</AllowedMethod> < AllowedHeader>*</AllowedHeader> < /CORSRule> < /CORSConfiguration>
但我还是犯了同样的错误。为什么要将这些标题附加到此请求 编辑4 即使有了上面的代码,标题仍然被添加到不同的位置,所以我找到了它并删除了它们。我现在收到的错误是:method: 'POST', headers: { 'Authorization': undefined },
这与CORS无关 这是因为你的桶的名字里有个点 如果您的bucket确实是美国标准的(
不一定是“美国标准”URL),那么这就是您需要的: var uploadDetails={ url:“”, 这称为基于路径或路径样式的URL,其中bucket表示为路径的第一个元素,而不是将其包含在主机名中 如果bucket名称有一个点,并且example bucket.s3.amazonaws.com
需要是s3,这是必需的。
对于非美国标准的bucket 这是通配符SSL/TLS证书的一个限制。S3提供了一个对s3区域。
*.S3[-region].amazonaws.com有效的证书,并且此类证书的规则声明
不能匹配点…因此该证书被视为无效,因此它是一个“不安全响应” 或者,只需创建一个带有破折号而不是圆点的bucket,代码就可以按原样工作*
由于您使用的是Signature V2,因此任一主机名构造都会为其他相同的请求生成相同的签名。对于Sig V4则不是这样。这与CORS无关 这是因为你的桶的名字里有个点 如果您的bucket确实是美国标准的(
不一定是“美国标准”URL),那么这就是您需要的: var uploadDetails={ url:“”, 这称为基于路径或路径样式的URL,其中bucket表示为路径的第一个元素,而不是将其包含在主机名中 如果bucket名称有一个点,并且example bucket.s3.amazonaws.com
需要是s3,这是必需的。
对于非美国标准的bucket 这是通配符SSL/TLS证书的一个限制。S3提供了一个对s3区域。
*.S3[-region].amazonaws.com有效的证书,并且此类证书的规则声明
不能匹配点…因此该证书被视为无效,因此它是一个“不安全响应” 或者,只需创建一个带有破折号而不是圆点的bucket,代码就可以按原样工作*
由于您使用的是Signature V2,因此任何一个主机名构造都会为其他相同的请求生成相同的签名。对于Sig V4则不是这样。实际问题有两个方面:- 标题不正确,因为“授权”标题即使从代码的Upload.Upload部分删除后仍然存在。
为了解决这个问题,我必须从我的api.injector代码中删除这个对象——这就是它被添加的地方
delete config.headers['Authorization']
- 从EDIT3开始,我生成的签名是错误的,所以我必须重新生成它
感谢Michael的帮助。实际问题有两个方面:- 标题不正确,因为“授权”标题即使从代码的Upload.Upload部分删除后仍然存在。
为了解决这个问题,我必须从我的api.injector代码中删除这个对象——这就是它被添加的地方
delete config.headers['Authorization']
- 从EDIT3开始,我生成的签名是错误的,所以我必须重新生成它
谢谢Michael的帮助。谢谢Michael的回复。我创建了一个全新的bucket,名为“ac-k24-uploads”它与前面提到的bucket具有相同的策略和CORS设置。我还更改了url以匹配您所说的内容-请参阅我的第二次编辑。@Michael,谢谢,我遇到了一个类似的问题,原因是bucket名称中有一个
,将其更改为
,并更改了url格式,使bucket名称成为后缀前缀广告也起到了作用。:-)谢谢你的回复,迈克尔。我创建了一个名为“ac-k24-uploads”的全新bucket它与前面提到的bucket具有相同的策略和CORS设置。我还更改了url以匹配您所说的内容-请参阅我的第二次编辑。@Michael,谢谢,我遇到了一个类似的问题,原因是bucket名称中有一个-
,将其更改为
,并更改了url格式,使bucket名称成为后缀前缀的广告也起了作用。:-)-
method: 'POST', headers: { 'Authorization': undefined },
delete config.headers['Authorization']
- 标题不正确,因为“授权”标题即使从代码的Upload.Upload部分删除后仍然存在。
为了解决这个问题,我必须从我的api.injector代码中删除这个对象——这就是它被添加的地方