2012-08-11 13 views
6

Qualcuno può fornire un codice per salvare un file caricato in BLOB BLU in binario? Attualmente utilizzo un salvataggio di testo che è incredibilmente lento su file enormi, lettura/salvataggio su BLOB, riga per riga.Salva file binario in BLOB da httppostedfile

Private Function ReadFile(ByVal file As HttpPostedFile) As String 
     Dim result As String = "" 
     Dim objReader As New System.IO.StreamReader(file.InputStream) 
     Do While objReader.Peek() <> -1 
      result = result & objReader.ReadLine() & vbNewLine 
     Loop 
     Return result 
    End Function 

Grazie

risposta

7

Questo frammento di codice si basa su un'applicazione di produzione che spinge le foto in deposito blob. Questo approccio estrae lo stream direttamente da HttpPostedFile e lo passa direttamente alla libreria client per l'archiviazione in un BLOB. È necessario variare alcune cose in base alla propria applicazione:

  • blobName sarà probabilmente necessario adattato.
  • connectionstring fino al recupero del client blob devono essere isolati in classi helper
  • Allo stesso modo è probabile che desidera un aiuto per il contenitore blob in base alla logica di business
  • Non si può decidere il contenitore per essere pienamente accessibile al pubblico . Questo è stato appena aggiunto per mostrarti come farlo se lo desideri
// assuming HttpPostedFile is in a variable called postedFile 
var contentType = postedFile.ContentType; 
var streamContents = postedFile.InputStream; 
var blobName = postedFile.FileName 

var connectionString = CloudConfigurationManager.GetSetting("YOURSTORAGEACCOUNT_CONNECTIONSTRING"); 
var storageAccount = CloudStorageAccount.Parse(connectionString); 
var blobClient = storageAccount.CreateCloudBlobClient(); 

var container = blobClient.GetContainerReference("YOURCONTAINERNAME"); 
container.CreateIfNotExist(); 
container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }); 

var blob = container.GetBlobReference(blobName); 
blob.Properties.ContentType = contentType; 
blob.UploadFromStream(streamContents);