2016-10-03 9 views
0
public class StorageService 
    { 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=leepiostorage;AccountKey=removed for this post"); 

     public async Task Upload(string id, Stream data) 
     { 
      CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
      // Retrieve a reference to a container. 
      CloudBlobContainer container = blobClient.GetContainerReference("images"); 

      await container.CreateIfNotExistsAsync(); 

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


      CloudBlockBlob blockBlob = container.GetBlockBlobReference(id); 

      await blockBlob.UploadFromStreamAsync(data, data.Length); 
     } 

     public async Task UploadBlogPhoto(string id, Stream data) 
     { 
      CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
      // Retrieve a reference to a container. 
      CloudBlobContainer container = blobClient.GetContainerReference("mycontainer"); 

      await container.CreateIfNotExistsAsync(); 

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


      CloudBlockBlob blockBlob = container.GetBlockBlobReference(id); 

      await blockBlob.UploadFromStreamAsync(data, data.Length); 
     } 
    } 

ここでは、2番目のメソッド「UploadBlogPhoto」を使用しようとしているStorageServicesクラスを示します。最初の作品です。スクリプトを使用してビューAzure Blobストレージオブジェクトリファレンスがオブジェクトのインスタンスに設定されていない

[HttpPost] 
     public async Task<ActionResult> UploadPhoto(HttpPostedFileBase file) 
     { 
      if (file != null && file.ContentLength > 0) 
      { 
       var fileExt = Path.GetExtension(file.FileName); 
       if (fileExt.ToLower().EndsWith(".png") || fileExt.ToLower().EndsWith(".jpg") || 
        fileExt.ToLower().EndsWith(".gif")) 
       { 
        var str = "example"; 
        await service.UploadBlogPhoto(str, file.InputStream); 
       } 
      } 
      return RedirectToAction("Index"); 
     } 

:ここ

は、ブログコントローラのメソッドである

@using (Html.BeginForm("UploadPhoto", "Blog", FormMethod.Post, new { enctype = "multipart/form-data" })) 
      { 
       <div class="browseimg"> 
        <input type="file" class="display-none" name="file" id="files" onchange="this.form.submit()" /> 
       </div> 
      } 
      <button class="btn btn-primary width-100p main-bg round-border-bot" id="falseFiles"> 
       Upload billede 
      </button> 

$(document) 
     .ready(function() { 
      $('#falseFiles') 
       .click(function() { 
        $("#files").click(); 
       }); 
     }); 

ちゃんと「画像」と呼ばれるコンテナにしたがって、最初のメソッドによるアップロード。私は単に第二の容器にアップロードし、他のメソッドを追加しようとすると、私は

await service.UploadBlogPhoto(str, file.InputStream); 

私はトリプルすべてをチェックしました、任意のアイデアで

Object reference not set to an instance of an object. 

を取得しますか?事前に感謝します

+1

を固定しましたか? – sachin

+0

はい、file.InputStreamはイメージを正常に取得します。 – crystyxn

+1

エラーは 'service.UploadBlogPhoto'に例外がありますが、そのメソッド内のブレークポイントがヒットしている場合は、' UploadBlogPhoto'の中でデバッグしてからF10を数回使って正確な行を特定できるはずです。 – sachin

答えて

0

問題はサービスがBlogControllerで初期化されなかったことでした。単に

public BlogController() 
     { 
      service = new StorageService(); 
     } 

を追加

はUploadBlogPhoto` `内部のブレークポイントが打撃を受けるん私の問題

関連する問題