Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 科尔斯。预先签名的URL。S3_Amazon S3 - Fatal编程技术网

Amazon s3 科尔斯。预先签名的URL。S3

Amazon s3 科尔斯。预先签名的URL。S3,amazon-s3,Amazon S3,我已经生成了一个预先签名的S3帖子URL。使用返回参数,然后将其传递到我的代码中,但我不断收到此错误对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许原点”标头。 而在邮递员,我可以提交一个附加文件的形式数据 在PostMan上,我手动输入了参数 然后将相同的参数输入到我的代码中。 您必须编辑CORS配置才能公开,例如: <?xml version="1.0" encoding="UTF-8"?> <CORSC

我已经生成了一个预先签名的S3帖子URL。使用返回参数,然后将其传递到我的代码中,但我不断收到此错误
对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许原点”标头。

而在邮递员,我可以提交一个附加文件的形式数据

在PostMan上,我手动输入了参数

然后将相同的参数输入到我的代码中。

您必须编辑CORS配置才能公开,例如:

   <?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>POST</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>


在我的例子中,我特别需要允许S3 Bucket的CORS配置中的PUT方法使用预先签名的URL,而不是接受答案中的GET方法:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>PUT</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

*
放
3000
*

我也遇到了这个问题。我的桶上的CORs配置似乎正确,但我预先指定的URL遇到了CORs问题。事实证明,我的预签名器的AWS_区域未设置为铲斗的AWS区域。将AWS_区域设置为正确的区域后,工作正常。我很恼火CORS问题对于一个简单的问题来说是一个大麻烦,浪费了我几个小时的时间。

对我来说,这是因为我的bucket名称中有一个连字符(例如,我的bucket)。签名的URL将用下划线替换bucket名称中的连字符,然后对其进行签名。这意味着两件事:

  • CORS不起作用,因为URL技术上不正确
  • 我不能仅仅将下划线改回连字符,因为当AWS验证签名的URL时,签名将是错误的
  • 我最终不得不将我的bucket重命名为不带连字符的名称(例如,mybucket),然后它在以下配置下运行良好:

    <?xml version="1.0" encoding="UTF-8"?>
    <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    </CORSConfiguration>
    
    
    *
    得到
    放
    邮递
    删除
    3000
    *
    
    我的问题是,出于某种原因-
    getSignedUrl
    返回了如下url:

    https://my-bucket.s3.us-west-2.amazonaws.com/bucket-folder/file.jpg


    我已经删除了region部分-
    us-west-2
    -并且在我的案例中修复了它,我通过允许方法来修复它,并且起源于S3。该菜单位于“权限”选项卡下


    无法发表评论,因此在此处添加此内容。包含哈维的答案,但采用文本形式,便于复制

    [
        {
            "AllowedHeaders": [
                "*"
            ],
            "AllowedMethods": [
                "GET",
                "PUT",
                "POST"
            ],
            "AllowedOrigins": [
                "*"
            ],
            "ExposeHeaders": []
        }
    ]
    

    没有意义,因为我可以通过邮递员上传。这是一个POST请求。不是很抱歉,我是说CORS配置。。我更新了答案。再次抱歉!谢谢你的提示。“允许头球:*”帮助了一点,我正在取得一些进展。让我困惑的是,同样的事情在邮递员身上也起了作用。但不是在我的code@ngzhongcaifwiw,这适用于postman和其他测试工具,因为postman不是一个网站。CORS是一种浏览器机制,防止站点a向站点B(即您的bucket)发出请求,除非站点B同意通过“飞行前检查”接受来自站点a查看者的请求。当您使用一个网站访问另一个网站时,浏览器需要CORS友好的响应,但邮递员不需要/使用/触发此安全机制,因为它实际上是为了保护用户和站点B不受站点A上潜在恶意代码的影响,并且在postman下没有站点A。这对Alloweader*不起作用,有人修复了吗?如果是文本,而不是其他人无法轻松复制的图像,这将是一个更好的答案。