Search code examples
asp.net-mvcblobazure-blob-storagemodel-validation

Can I get a blob by using its url?


I am storing the Azure blob url into my database.Can I get the blob by using that url? Actually I need to update the blob and while doing that I need validations. So I need to convert that database entity model to my local model and apply the validations for them.But in my local model I am having Id,Name,HttpPostedFileBase file.When I am inserting the blob I am getting the blob url and saving it in database.But how to retrieve that blob while updating? This is my local Model

public class BlobAppModel
    {
        public int Id { get; set; }
        [Required(ErrorMessage="Please enter the name of the image")]
        [Remote("IsNameAvailable","Home",HttpMethod="POST",ErrorMessage="Name Already Exists")]
        public string Name { set; get; }
         [Required(ErrorMessage="Please select an image file")]
        public HttpPostedFileBase File { set; get; }

    } 

An My entitymodel is this one

public partial class BlobApp
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Uri { get; set; }
    }

when I am Editing it I need to get the blob ..I am stuck here..Can anyone help me out?

public ActionResult Edit(string Id)
        {
            var data=BlobManager.GetBlob(Convert.ToInt32(Id));
            BlobStorageServices _blobstorageservice = new BlobStorageServices();
            CloudBlobContainer container = _blobstorageservice.GetCloudBlobContainer();
            CloudBlockBlob blob = container.GetBlockBlobReference(data.Uri.ToString());

            BlobAppModel model = new BlobAppModel { Id = data.Id, Name = data.Name, File =//This is where I need to get the file//};
            return View("Edit",BlobManager.GetBlob(Convert.ToInt32(Id)));
        }

Solution

  • The best way to access a blob is by accessing the storage with the container name and the blob reference, as explained here: https://www.windowsazure.com/en-us/develop/net/how-to-guides/blob-storage/#download-blobs In your code you need to change the blob reference to the name you set when uploading, no to the uri.

    CloudBlockBlob blob = container.GetBlockBlobReference(data.Uri.ToString());
    

    use this instead:

    CloudBlockBlob blob = container.GetBlockBlobReference("yourfile.jpg");
    

    If you have the blob url, and the container is set to public access you can get the data by simply downloading it using a regular http client.