2016-11-01 7 views
1

Я пытаюсь загрузить файлы в двоичных объектов Azure из приложения MVC, я следую this учебник, и я застрял в этом фрагменте:Загрузить файл в Blob Azure

using (var fileStream = System.IO.File.OpenRead(@"path\myfile")) 
{ 
    blockBlob.UploadFromStream(fileStream); 
} 

Как сделать @"path\myfile" динамический ?? Как получить реальный путь моего файла, чтобы поместить его туда? Я принимаю любые другие предложения тоже загрузить на BLOb :)

UPDATE

Как предположил я добавил код внутри мой взгляд:

@model RiPSShared.Models.RiPSModels.AgencyNote 

<h2>PostFile</h2> 

<form action="@Url.Action("PostFile", "AgencyNotes", new { NoteId=Model.aut_id})" method = "post" enctype="multipart/form-data"> 
    <label for="file1"> File name:</label> 
    <input type="file" name="file" id="file1" /> 
    <input type="submit" value="Submit" />  
</form> 

и контроллер полное действие:

public ActionResult PostFile(HttpPostedFileBase file, int NoteId) 
{ 
CloudBlockBlob blockBlob = container.GetBlockBlobReference(path); 
using (Stream fileStream = file.InputStream) 
      { 
       blockBlob.UploadFromStream(fileStream); 
      } 
return RedirectToAction("Index"); 
} 

ответ

5

HttpPostedFileBase будет располагать необходимой информацией. В частности, InputStream свойство даст вам поток

[HttpPost] 
public ActionResult PostFile(HttpPostedFileBase file, int NoteId) 
{ 
    // Your existing code for azure blob access 
    CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob"); 
    // make sure to a null check on file parameter before accessing the InputStream 

    using (var s = file.InputStream) 
    { 
     blockBlob.UploadFromStream(s); 
    } 
    // to do :Return something 
} 
+1

просто ждет одну минуту выбрать его как ответ отлично работает !!! – AlexGH

+0

Я предлагаю вам включить соответствующую информацию (есть сообщение о форме из вашего представления, а ваш параметр метода действия - тип HttpPostedFileBase) на вопрос, чтобы помочь будущим читателям. Я знал это, потому что я читал ваш предыдущий вопрос. – Shyju

+1

спасибо! Теперь он обновлен :) – AlexGH

1

Также вы установите строку соединения в файле конфигурации и получить от этого и хранения файлов в хранилище больших двоичных объектов сначала получить его имя контейнера

 //StorageConnectionString string specified in configuration file 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
     CloudConfigurationManager.GetSetting("StorageConnectionString")); 

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

     // Retrieve a reference to a container. 
     //specified container name 
     CloudBlobContainer container = blobClient.GetContainerReference("myBlobcontainer"); 

     // Create the container if it doesn't already exist. 
     container.CreateIfNotExists(); 

     container.SetPermissions(
     new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }); 

     CloudBlockBlob blockBlob = container.GetBlockBlobReference("myBlob"); 

     // Create or overwrite the "myblob" blob with contents from a local file. 
     using (var fileStream = file.InputStream) 
     { 
      blockBlob.UploadFromStream(fileStream); 
     } 
Смежные вопросы