Upload to Shared Access Signature blob using WebClient (REST API)
I want asked by a client how to upload a blob (Put blob) to a SAS (Shared Access Signature) blob using the REST Api.
Here is a simple code snippet demonstrating that using WebClient.
class Program
{
private static CloudBlobContainer m_container;
static void Main(string[] args)
{
try
{
var m_StorageAccount = CloudStorageAccount.DevelopmentStorageAccount;
var m_BlobClient = m_StorageAccount.CreateCloudBlobClient();
m_container = m_BlobClient.GetContainerReference("myContainer");
m_container.CreateIfNotExist();
BlobContainerPermissions permissions = new BlobContainerPermissions();
// The container itself doesn't allow public access.
permissions.PublicAccess = BlobContainerPublicAccessType.Off;
// The container itself doesn't allow SAS access.
var containerPolicy = new SharedAccessPolicy() { Permissions = SharedAccessPermissions.None };
permissions.SharedAccessPolicies.Clear();
permissions.SharedAccessPolicies.Add("TestPolicy", containerPolicy);
m_container.SetPermissions(permissions);
var uri = GetSharedAccessSignature("b1", DateTime.Now.AddDays(1));
var client = new WebClient();
client.UploadFile(uri,"PUT", "b1.txt");
Console.WriteLine("Done");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadLine();
}
public static string GetSharedAccessSignature(string objId, DateTime expiryTime)
{
CloudBlob blob = m_container.GetBlobReference(objId);
var blobAccess = new SharedAccessPolicy
{
Permissions = SharedAccessPermissions.Write,
SharedAccessExpiryTime = expiryTime
};
return blob.Uri + blob.GetSharedAccessSignature(blobAccess, "TestPolicy");
}
}
Enjoy
Manu