使用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。我根據該帖子更新了我的代碼,並修復了我的問題!
您可以檢查HTTP://計算器。 COM /問題/ 19723064 /的WebAPI-FORMDATA上傳到DB-與-額外參數 – Ravia