2014年1月28日 星期二

上傳檔案的工作交給另一個Controller去執行

因為專案中有很多Controller會用到上傳的功能, 因為新增一個專門處理上傳功能的Controller : FileController :

假設現在新增一筆演員資料並同時上傳 : 
public ActionResult Create(Actor actorHttpPostedFileBase Avatar)
{
    _db.Actor.Add(actor);
    _db.SaveChanges();
    // 更新圖片
    new FileController().UploadActorAvatar(actor.IdAvatar);
    //
    return RedirectToAction("Index"new { term = actor.Name });
}

在 FileController 的 UploadActorAvatar 使用 Server.MapPath() 時會發生 null reference, 因為此時 HttpContext 不存在

解法 :

1. 傳 HttpContext, 用 HttpContextBase 接

@ ActorController 
new FileController().UploadActorAvatar(actor.IdAvatarHttpContext);
@ FileController
public void UploadActorAvatar(long idHttpPostedFileBase Avatar,HttpContextBase h)
+
var folderPaht = h.Server.MapPath("~/Uploads/ActorAvatar/");



2. 不要使用 HttpContext.Server.MapPath , 改用


HostingEnvironment.MapPath()

沒有留言: