2

使用MVC 4我試圖構建一個Web API控制器,您可以在其中上傳圖像。上傳完成後,控制器應該將圖像保存在數據庫中。這裏是我的代碼:Web API文件上傳問題

[HttpPost] 
public void UploadPhoto(int thirdPartyID) 
{    
    if (!Request.Content.IsMimeMultipartContent()) 
     throw new Exception(); // divided by zero 

    byte[] data = null; 
    var filename = string.Empty; 

    var provider = new MultipartMemoryStreamProvider(); 
    Request.Content.ReadAsMultipartAsync(provider).ContinueWith(y => 
    { 
     foreach (var file in provider.Contents) 
     { 
      filename = file.Headers.ContentDisposition.FileName.Trim('\"'); 
      data = file.ReadAsByteArrayAsync().Result;        
     } 

     var image = this.GetImageFrom(data);    
     var member = this.GetMemberBy(thirdPartyID); 

     member.ProfileImage = data; 

     this.memberService.Save();       
    });   
} 

以下行執行時出現問題:

this.memberService.Save(); 

我使用Ninject和Entity Framework。當這個執行時,我得到錯誤:ObjectContext實例已被處置,不能再用於需要連接的操作。我假設這是因爲'ContinueWith'在不同的請求範圍內異步執行,而不是我的DI綁定原始DbContext?這是我爲我的UOW DI綁定:

kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InScope(x => HttpContext.Current); 

我讀過如何改變DI所以它的範圍和對象綁定,但是這是一個大的項目,我不舒服在這個階段改變組成的根。有沒有人有變通辦法,不涉及更改DI?我試圖改變線路

Request.Content.ReadAsMultipartAsync(provider).ContinueWith(y =>... 

Request.Content.ReadAsMultipartAsync(provider).RunSynchronously(); 

Request.Content.ReadAsMultipartAsync(provider).Wait(); 

同步運行的 'RunSynchronously' 的方法給我一個錯誤,在wait()方法只是掛起。我只需要上傳圖片,然後將其存儲在數據庫中。

編輯 剛剛來到acorss這個:Request.Content.ReadAsMultipartAsync never returns。我根據該帖子更新了我的代碼,並修復了我的問題!

+0

您可以檢查HTTP://計算器。 COM /問題/ 19723064 /的WebAPI-FORMDATA上傳到DB-與-額外參數 – Ravia

回答