2013-11-01 7 views
7

Sto memorizzando l'url BLOB di Azure nel mio database. Posso ottenere il blob usando quell'URL? In realtà ho bisogno di aggiornare il blob e mentre lo faccio ho bisogno di validazioni. Quindi ho bisogno di convertire quel modello di entità di database nel mio modello locale e applicare le convalide per loro. Ma nel mio modello locale sto avendo Id, Nome, HttpPostedFileBase file. Quando sto inserendo il blob sto ricevendo l'url blob e salvandolo nel database. Ma come recuperare quel blob durante l'aggiornamento? Questo è il mio modello localePosso ottenere un blob usando il suo URL?

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

    } 

Un mio entitymodel è questo uno

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

quando sto modificandolo ho bisogno di ottenere il blob ..sono bloccato here..Can chiunque darmi una mano ?

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

risposta

6

Il modo migliore per accedere a un blob è accedendo alla memorizzazione con il nome del contenitore e il riferimento blob, come spiegato qui: https://www.windowsazure.com/en-us/develop/net/how-to-guides/blob-storage/#download-blobs Nel codice è necessario modificare il riferimento blob al nome impostato durante il caricamento, no per l'uri.

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

uso questo, invece:

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

Se avete l'url blob, e il contenitore è impostato per l'accesso del pubblico è possibile ottenere i dati semplicemente scaricando utilizzando un client http regolare.

7

Come menzionato anche Cristian, è possibile utilizzare GetBlockBlobReference se si ha il nome del proprio BLOB. Altrimenti, se desideri utilizzare l'URL completo, puoi semplicemente creare un nuovo oggetto CloudBlockBlob utilizzando uno dei suoi constructors che accetta un oggetto Uri e un oggetto StorageCredentials. Potrebbe non essere necessario nemmeno l'oggetto StorageCredentials se l'Uri che hai contiene credenziali SAS o il blob è pubblico.

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

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

è possibile ottenere il riferimento blob utilizzando bri Uri e contenitore. Ad esempio se è necessario aggiornare o eliminare BLOB e si dispone già di un contenitore con le credenziali di configurazione:

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