2013-09-03 2 views
14

Как я могу загрузить файл с C#? Мне нужно загрузить файл из диалогового окна.Загрузить один файл в хранилище Blob Azure

+0

Заканчивать [Blob утилита передачи] (https://blobtransferutility.codeplex.com/) его большой проект, все в C#. Это покажет вам, как это сделать. – paqogomez

+0

Вот обертка C# на [GitHub] (https://github.com/AgentTy/General.CDN), она работает с блоками Azure или Amazon S3 и поддерживает локальное кэширование и проверку версий. –

+0

Этот класс [C# Azure Blob Storage Manager] (http://cc.davelozinski.com/code/csharp-azure-blob-storage-manager-class) - довольно хороший файл базового класса, если кто-то нуждается в классе для своих C#. –

ответ

2

мы можем использовать BackgroundUploader класса, то мы должны обеспечить StorageFile объекта и Uri: Требуемые Namespaces:

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; 

Процесс выглядит так: Uri определяется с помощью строковое значение, предоставленное через поле ввода пользовательского интерфейса, и желаемый файл для загрузки, представленный объектом StorageFile, возвращается, когда конечный пользователь выбрал файл через пользовательский интерфейс, предоставленный операцией PickSingleFileAsync

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

и потом:

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

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

Thats Все

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

см here о необходимых SDK и ссылки

я думаю, что это то, что вам нужно

1

Вот полный метод.

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

где метод getconnectionstring это.

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); 
      } 
Смежные вопросы