我尝试使用以下方法将文件上传到blob存储:
public static void UploadBlobWithRestAPISasPermissionOnBlobContainer(string blobContainerSasUri, string blobName, byte[] blobContent)
{
int contentLength = blobContent.Length;
string queryString = (new Uri(blobContainerSasUri)).Query;
string blobContainerUri = blobContainerSasUri.Split('?')[0];
string requestUri = string.Format(CultureInfo.InvariantCulture, "{0}/{1}{2}", blobContainerUri, blobName, queryString);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri);
request.Method = "PUT";
request.Headers.Add("x-ms-blob-type", "BlockBlob");
request.ContentLength = contentLength;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(blobContent, 0, contentLength);
}
using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse())
{
}
}
我收到以下错误:
"远程服务器返回错误:(403)Forbidden。"
我有blob sasquery字符串和完整的blob url:
https://domainname.blob.core.windows.net/myContainer/18/Picture.jpg
SV = 2015年4月5日&安培; SR = B和= SIG%Llp36ygMvUILVZfyaac 2BX ....
我可以使用sas查询和网址吗?
更新 我如何生成SAS
var storageConnectionString = CloudConfigurationManager.GetSetting(" MS_StorageConnectionString");
var cloudStorageAccount = CloudStorageAccount.Parse(storageConnectionString);
var cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
var storageContainer = CloudConfigurationManager.GetSetting("MB_UserStorageContainer");
var cloudBlobContainer = cloudBlobClient.GetContainerReference(storageContainer);
var sasPolicy = new SharedAccessBlobPolicy()
{
SharedAccessStartTime = DateTime.UtcNow,
SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(5),
Permissions = SharedAccessBlobPermissions.Write,
};
var resourceName = $"{fileName}";
var cloudBlob = cloudBlobContainer.GetBlockBlobReference(resourceName);
var sasQueryString = cloudBlob.GetSharedAccessSignature(sasPolicy);
var blobUri = $"{cloudStorageAccount.BlobEndpoint}{containerName}/{fileName}";