我有一个问题要写入天蓝色的存储容器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=> {})
答案 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=> {})