2017-02-21 17 views
0

Мне нужно загрузить файлы в Azure blob.I пробовал, как показано ниже. Но это не работает. Надеюсь, что я делаю это неправильно. Раньше я использовал файловую систему для магазин изображений. Но теперь мне нужно сохранить его в Blob.Загрузить файлы в Azure blob с помощью Web Api

Примечание: blockBlob.UploadFromStream(filestream);//after this point it doesn't work

Web API Метод

[HttpPost] 
public async Task<HttpResponseMessage> AddPictures() 
    { 
     if (!Request.Content.IsMimeMultipartContent()) 
     { 
      Request.CreateResponse(HttpStatusCode.UnsupportedMediaType); 
     } 

     var newImageName = string.Empty; 
     var path = System.Web.Hosting.HostingEnvironment.MapPath("~"); 
     var provider = GetMultipartProvider(); 
     await Request.Content.ReadAsMultipartAsync(provider); 

     foreach (var r in provider.FileData) 
      { 
       var uploadedFileInfo = new FileInfo(r.LocalFileName); 
       var originalFileName = GetDeserializedFileName(r); 
       var extension = Path.GetExtension(originalFileName); 
       if (extension == null) continue; 

       var ext = extension.ToLower(); 
       var guid = Guid.NewGuid().ToString(); 
       newImageName = guid + ext; 

       var storageAccount = new CloudStorageAccount(new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials("pictures", "key"),true); 

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

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

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

       using (var filestream = File.OpenRead(r.LocalFileName)) 
       { 
       blockBlob.UploadFromStream(filestream);//after this point it doesn't work 
       } 
       File.Delete(r.LocalFileName); 

      } 
       return Request.CreateResponse(HttpStatusCode.OK, new { newImageName }); 
     } 

AngularJS метод

  //to add Pictures 
      vm.addPictures = function ($files, errFiles) { 
       vm.upload = []; 
       vm.errFiles = errFiles; 
       if ($files && $files.length) { 
        //$files: an array of files selected, each file has name, size, and type 
        for (var i = 0; i < $files.length; i++) { 
         var $file = $files[i]; 
         (function (index) { 
          vm.upload[index] = upload.upload({ 
           url: "/api/Picture/AddPictures", 
           method: "POST", 
           data: {}, 
           file: $file 
          }).progress(function() { 
          }).success(function (data) { 
           vm.pictureList.push({ 
            id: vm.pictureList.length + 1, 
            url: '/common/pictures/' + data.newImageName, 
            note: '', 
            isSelected: true, 
           }); 

          }).error(function() { 
          }); 
         })(i); 
        } 
       } 
      }; 

Стек трассировки

at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand 1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 604 at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.UploadFromStreamHelper(Stream source, Nullable 1 length, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlockBlob.cs:line 397 at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.UploadFromStream(Stream source, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlockBlob.cs:line 295 at Joshi.IP.WebApi.Controllers.PictureController.d__0.MoveNext() in D:\my\my.WebApi\WebApi\Controllers\PictureController.cs:line 116

Сообщение об исключении:

The remote server returned an error: (404) Not Found.

Blob Контейнер

enter image description here

+0

Что вы имеете в виду под «не работает «? Вы получаете какие-либо ошибки? –

+0

какая версия MVC вы используете? Я предполагаю MVC 4? – Svek

+0

ASP.net MVC 5 и Web api 5 @Svek – Sampath

ответ

1

Ваш счет хранения называется ippictures, но контейнер называется ippictures. В своем коде вы blobClient.GetContainerReference("ippictures"); вместо blobClient.GetContainerReference("ip-pictures");

Вы можете добавить подстраховку для такого рода ситуаций, проверяя, существует ли указанный контейнер или нет:

var container = blobClient.GetContainerReference("ip-pictures"); 
container.CreateIfNotExists() 
+0

Спасибо большое :) – Sampath

 Смежные вопросы

  • Нет связанных вопросов^_^