15

我将 Azure blob url 存储到我的数据库中。我可以使用该 url 获取 blob 吗?实际上我需要更新 blob,同时我需要验证。所以我需要将该数据库实体模型转换为我的本地模型并为它们应用验证。但是在我的本地模型中,我有 Id、Name、HttpPostedFileBase 文件。当我插入 blob 时,我得到 blob url 并保存它在数据库中。但是如何在更新时检索该 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

4 回答 4

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

    CloudBlockBlob blob = new CloudBlockBlob(new Uri(imgUrl),storageAccount.Credentials);
于 2014-06-04T11:48:47.413 回答
11

正如 Cristian 还提到的,如果您有 blob 的名称,则可以使用 GetBlockBlobReference。否则,如果您想使用完整的 URL,您可以简单地创建一个新的 CloudBlockBlob 对象,方法是使用其构造函数之一,该构造函数采用 Uri 和 StorageCredentials 对象。如果您拥有的 Uri 包含 SAS 凭据或 blob 是公共的,您甚至可能不需要 StorageCredentials 对象。

于 2013-11-04T23:19:52.007 回答
6

访问 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 url,并且容器设置为公共访问权限,则只需使用常规 http 客户端下载数据即可获取数据。

于 2013-11-02T20:33:27.447 回答
3

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

var blob = container.ServiceClient.GetBlobReferenceFromServer(blobUri);
于 2016-01-21T14:18:20.990 回答