不能用密钥写blob

时间:2019-04-09 11:08:00

标签: angular azure blob

我有一个问题要写入天蓝色的存储容器blob。我在http上发布了一个针对Azure网站的请求。我尝试了包括SAS在内的其他密钥。

我总是收到错误403: 服务器无法验证请求。请确保正确构成Authorization标头的值(包括签名)。

so I suppose the url was found 
can you please help me

the code is as follows

let url = "https://matasisrael.blob.core.windows.net/matas/routes.json";
const httpOptions = {
        headers: new HttpHeaders({
        'x-ms-version': '2015-02-21',
        'x-ms-date': '2019-04-09',
        'Content-Type': 'application/json; charset=UTF-8',
        'x-ms-blob-type': 'BlockBlob',
        'Authorization': 'SharedKey myaccount:<access key>,

        'Vary': 'Origin',
        'Content-Length':"1024"

      })
    };
     this.http.put(url,"{hel:ds}",httpOptions).subscribe(data=> {})

1 个答案:

答案 0 :(得分:1)

由于您是通过Angular应用程序上传Blob,因此建议您使用SAS令牌。使用SAS令牌,您实际上不需要提供Authorization标头。

您要做的是使用Blob URL和SAS Token创建SAS Url,并使用该URL进行HTTP PUT请求。由于SAS令牌已经包含存储服务版本,因此您不需要在请求标头中包含x-ms-version。另外,您不需要x-ms-date标头。

因此您的代码将类似于:

let url = "https://matasisrael.blob.core.windows.net/matas/routes.json?" + sasToken;
let requestBody = "{hel:ds}";
const httpOptions = {
        headers: new HttpHeaders({
        'Content-Type': 'application/json; charset=UTF-8',
        'x-ms-blob-type': 'BlockBlob',
        'Content-Length': requestBody.length
      })
    };
this.http.put(url, requestBody, httpOptions).subscribe(data=> {})