2013-09-03 13 views
14

Come posso caricare un file con C#? Ho bisogno di caricare un file da una finestra di dialogo.Carica un singolo file su Archiviazione BLOB Azure

+0

Partenza [utilità di trasferimento Blob] (https://blobtransferutility.codeplex.com/) la sua un grande progetto, il tutto in C#. Ti mostrerà come. – paqogomez

+0

Ecco un wrapper C# su [GitHub] (https://github.com/AgentTy/General.CDN), funziona con BLOB di Azure o Amazon S3 e supporta il caching locale e il controllo della versione. –

+0

Questa [C# Azure Blob Storage Manager class] (http://cc.davelozinski.com/code/csharp-azure-blob-storage-manager-class) è un file di classe di base abbastanza buono se qualcuno ha bisogno di una classe per Progetti C#. –

risposta

2

possiamo usare BackgroundUploader classe, quindi abbiamo bisogno di fornire StorageFile oggetto e un Uri: spazi dei nomi necessari:

using System; 
using System.Collections.Generic; 
using System.Threading; 
using System.Threading.Tasks; 
using Windows.Foundation; 
using Windows.Foundation.Collections; 
using Windows.Networking.BackgroundTransfer; 
using Windows.Storage.Pickers; 
using Windows.Storage; 

Il processo è simile a questo: Uri è definito utilizzando un valore di stringa fornito tramite un campo di input dell'interfaccia utente e il file desiderato per il caricamento, rappresentato da un oggetto StorageFile, viene restituito quando l'utente finale ha selezionato un file tramite l'interfaccia utente fornita dall'operazione PickSingleFileAsync

Uri uri = new Uri(serverAddressField.Text.Trim()); 
FileOpenPicker picker = new FileOpenPicker(); 
picker.FileTypeFilter.Add("*"); 
StorageFile file = await picker.PickSingleFileAsync(); 

e poi:

BackgroundUploader uploader = new BackgroundUploader(); 
uploader.SetRequestHeader("Filename", file.Name); 
UploadOperation upload = uploader.CreateUpload(uri, file); 

// Attach progress and completion handlers. 
await HandleUploadAsync(upload, true); 

questo è tutto

28
using Microsoft.WindowsAzure.Storage; 
using Microsoft.WindowsAzure.Storage.Auth; 
using Microsoft.WindowsAzure.Storage.Blob;  

// Retrieve storage account from connection string. 
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse("StorageKey"); 

// Create the blob client. 
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

// Retrieve reference to a previously created container. 
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer"); 

// Retrieve reference to a blob named "myblob". 
CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob"); 

// Create or overwrite the "myblob" blob with contents from a local file. 
using (var fileStream = System.IO.File.OpenRead(@"path\myfile")) 
{ 
    blockBlob.UploadFromStream(fileStream); 
} 

vedere here su SDK e riferimenti

penso che sia quello che ti serve necessario

1

Ecco il metodo completo.

[HttpPost] 
     public ActionResult Index(Doctor doct, HttpPostedFileBase photo) 
     { 

      try 
      { 
       if (photo != null && photo.ContentLength > 0) 
       { 
        // extract only the fielname 
        var fileName = Path.GetFileName(photo.FileName); 
        doct.Image = fileName.ToString(); 

        CloudStorageAccount cloudStorageAccount = DoctorController.GetConnectionString(); 
        CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient(); 
        CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("images"); 


        string imageName = Guid.NewGuid().ToString() + "-" +Path.GetExtension(photo.FileName); 

        CloudBlockBlob BlockBlob = cloudBlobContainer.GetBlockBlobReference(imageName); 

        BlockBlob.Properties.ContentType = photo.ContentType; 
        BlockBlob.UploadFromStreamAsync(photo.InputStream); 
        string imageFullPath = BlockBlob.Uri.ToString(); 

        var memoryStream = new MemoryStream(); 


        photo.InputStream.CopyTo(memoryStream); 
        memoryStream.ToArray(); 



        memoryStream.Seek(0, SeekOrigin.Begin); 
        using (var fs = photo.InputStream) 
        { 
         BlockBlob.UploadFromStreamAsync(memoryStream); 
        } 

       } 
      } 
      catch (Exception ex) 
      { 

      } 


      return View(); 
     } 

in cui il metodo GetConnectionString è questo.

static string accountname = ConfigurationManager.AppSettings["accountName"]; 
     static string key = ConfigurationManager.AppSettings["key"]; 


      public static CloudStorageAccount GetConnectionString() 
      { 

       string connectionString = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", accountname, key); 
       return CloudStorageAccount.Parse(connectionString); 
      } 
Problemi correlati