我可以使用其网址获取blob吗?

时间:2013-11-01 08:57:30

标签: asp.net-mvc blob azure-storage-blobs model-validation

我将Azure blob url存储到我的数据库中。可以使用该URL获取blob吗? 实际上我需要更新blob,在这样做时我需要验证。所以我需要将该数据库实体模型转换为我的本地模型并对它们应用验证。但在我的本地模型中我有Id,Name,HttpPostedFileBase文件。当我插入blob时,我得到blob url并保存它在database.But如何在更新时检索该blob? 这是我当地的模特

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; }

    } 

我的实体模型就是这个

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

当我编辑它时,我需要得到blob ..我被困在这里..任何人都可以帮助我吗?

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)));
        }

4 个答案:

答案 0 :(得分:19)

   CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
                ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);

    CloudBlockBlob blob = new CloudBlockBlob(new Uri(imgUrl),storageAccount.Credentials);

答案 1 :(得分:9)

正如Cristian所提到的,如果你有blob的名字,你可以使用GetBlockBlobReference。否则,如果您想使用完整的URL,您可以使用其中一个带有Uri和StorageCredentials对象的constructors来创建一个新的CloudBlockBlob对象。如果您拥有的Uri包含SAS凭据或blob是公共的,则您甚至可能不需要StorageCredentials对象。

答案 2 :(得分:7)

访问blob的最佳方法是使用容器名称和blob引用访问存储,如下所述: https://www.windowsazure.com/en-us/develop/net/how-to-guides/blob-storage/#download-blobs 在您的代码中,您需要将blob引用更改为您在上传时设置的名称,不需要更改为uri。

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

改为使用:

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

如果您有blob网址,并且容器设置为公共访问权限,则只需使用常规http客户端下载即可获取数据。

答案 3 :(得分:2)

可以使用blob Uri和容器获取blob引用。例如,如果您需要更新或删除blob,并且您已经拥有包含凭据设置的容器:

var blob = container.ServiceClient.GetBlobReferenceFromServer(blobUri);