UnsupportedHttpVerb:资源不支持指定的Http Verb。请求ID:fa9c21f3-0001-005a-1484-d83478000000

时间:2017-05-29 16:59:23

标签: azure cors blob azure-storage-blobs angular2-forms

我想通过angular2将文件存储到azure blob数据中。所以我创建了一个名为“mysampleoxy”

的存储空间

然后在blob下创建了一个容器“视频”。 现在我想将文件从我的本地服务器上传到Azure,这样我就用url创建了一个sas密钥 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

我已经使用以下详细信息启用了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>

和Headers是:

请求网址: 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 Verb。

远程地址: 52.172.16.136:443

推荐人政策: 没有引用,当降级 我的角色配置没有任何问题。任何解决方案都可以帮助我解决这个问题。

谢谢。

2 个答案:

答案 0 :(得分:1)

您的请求网址不正确。它应该包括容器名称和文件名。因此,如果您在“视频”容器下上传“file.mov”(示例),则您的请求网址应为:

  

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

我还建议更改AllowedHeaders&amp;在ExposedHeaders的CORS配置中*(即允许所有标题和&amp;返回所有标题)。这些标头中的轻微不匹配将导致Azure存储403错误。所以你的CORS配置是:

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

答案 1 :(得分:0)

我正在尝试使用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)