azure UnsupportedHttpVerb:资源不支持指定的Http predicate ,RequestId:fa9c21f3-0001-005a-1484-d83478000000

0wi1tuuw  于 2023-05-07  发布在  其他
关注(0)|答案(2)|浏览(143)

我想通过angular2将文件存储到azure blob数据中。因此我创建了一个名为“mysampleoxy”存储
然后在blob下创建容器“videos”。现在,我想将文件从本地服务器上传到Azure,这样,我就创建了一个带有url https://mysampleoxy.blob.core.windows.net/?sv=2016-05-31&ss=bfqt&srt=sco&sp=rwdlacup&se=2017-05-30T04:20:04Z&st=2017-05-29T11:20:04Z&spr=https&sig=4Ir2JxigytwHfbyhhY1K4dOWAgZvvZnEzbNKqB4cjSA%3D的sas密钥
并且我已经启用了blob的cors,详细信息如下

<CorsRule>
  <AllowedOrigins>*</AllowedOrigins>
  <AllowedMethods>PUT,GET</AllowedMethods>
  <AllowedHeaders>x-ms-meta-data*,x-ms-meta-target,x-ms-meta-source</AllowedHeaders>
  <ExposedHeaders>x-ms-meta-*</ExposedHeaders>
  <MaxAgeInSeconds>200</MaxAgeInSeconds>
</CorsRule>

但当我试图上传文件通过我的服务器下面的错误是显示在控制台

<?xml version="1.0" encoding="utf-8"?>

<Error><Code>UnsupportedHttpVerb</Code>

<Message>The resource doesn't support specified Http Verb.
RequestId:fa9c21f3-0001-005a-1484-d83478000000
Time:2017-05-29T14:02:25.2296729Z</Message>

</Error>

标题为:
请求URL:https://mysampleoxy.blob.core.windows.net/?sv=2016-05-31&ss=bfqt&srt=sco&sp=rwdlacup&comp=list&se=2017-05-30T01:21:04Z&st=2017-05-29T11:30:04Z&spr=https&sig=Ko5UzKrjRHhvQIJG2fpgGMgPiZiVxMhLTwNZbaiFNeA%3D
申请方式:PUT
验证码:405资源不支持指定的Http动词。
远程地址:52.172.16.136:443
推荐人政策:no-referrer-when-downgrade我没有得到任何错误与我的cors配置.任何解决方案都可以帮助我解决这个问题。
谢谢大家。

0aydgbwb

0aydgbwb1#

您的请求不正确。它应该包括容器名和文件名。因此,如果您在file.mov“videos”容器下上传“www.example.com”(示例),您的请求URL应该是:
https://mysampleoxy.blob.core.windows.net/videos/file.mov?sv=2016-05-31&ss=bfqt&srt=sco&sp=rwdlacup&comp=list&se=2017-05-30T01:21:04Z&st=2017-05-29T11:30:04Z&spr=https&sig=Ko5UzKrjRHhvQIJG2fpgGMgPiZiVxMhLTwNZbaiFNeA%3D
我还建议将CORS配置中的AllowedHeadersExposedHeaders更改为*(即allow all headers & return all headers)。这些标头中的轻微不匹配将导致来自Azure存储的403错误。因此,您的CORS配置将是:

<CorsRule>
  <AllowedOrigins>*</AllowedOrigins>
  <AllowedMethods>PUT,GET</AllowedMethods>
  <AllowedHeaders>*</AllowedHeaders>
  <ExposedHeaders>*</ExposedHeaders>
  <MaxAgeInSeconds>200</MaxAgeInSeconds>
</CorsRule>
erhoui1w

erhoui1w2#

我试图使用POST,而PUT方法是必要的。
工作代码:

const url = `${baseURL}/${containerName}/${file.name}?${Container_SAS}`;
      const response = await fetch(url,
                {
                    method: 'PUT',
                    headers: {
                        'x-ms-blob-type': 'BlockBlob',
                    },
                    body: file
                });
      console.log('response', response.statusText, response.status)

相关问题