使用rest API将文件上载到blob存储

时间:2016-06-04 13:31:02

标签: c# azure azure-storage

我尝试使用以下方法将文件上传到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}";

0 个答案:

没有答案