2015-07-10 99 views
0

我想在編輯模式下編輯其他東西,但我不想重新上傳編輯模式下的圖像文件,該模式已經在create模式。所以我想在編輯模式下查看圖像的路徑。如何在ASP.Net中更新上傳的文件並刪除舊的文件MVC

public ActionResult Edit(HttpPostedFileBase file, FileUpload fileupload) 
     { 
      if (ModelState.IsValid) 
      { 
       if (file != null) 
       { 
        string fil = System.IO.Path.GetFileName(file.FileName); 
        string path = System.IO.Path.Combine(Server.MapPath("~/Content/Uploads/Files/"), fil); 
        file.SaveAs(path); 
        fileupload.FileURL = "/Content/Uploads/Files/" + file.FileName; 
       } 

       db.Entry(fileupload).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      return View(fileupload); 
     } 

和編輯視圖模式是:

@using (Html.BeginForm("Edit", "FileUploadTest", FormMethod.Post, new { enctype = "multipart/Form-data" })) 
{ 
    @Html.AntiForgeryToken() 

     <label for="file">Upload Image:</label> 
     <input type="file" name="file" id="file" style="width:50%" />  

    <input type="submit" value="Save" class="btn btn-default" /> 

}

我已經上傳了使用創建操作/查看方法的文件。

我該如何做到這一點?

+0

我使用'Image'作爲一個單獨的對象來討論'Model'。例如,一篇新聞文章可能有一張圖片。當我編輯(或添加)時,我檢查圖像是否已上傳,並**將圖像追加爲數據庫中的相關對象。在這種情況下,也許你可以在圖像頁面有一個'hidden'字段,並將你的'file'輸入重命名爲與提交時檢查相關的非模型。這樣,如果沒有圖像上傳,隱藏字段將被使用,現有的文件路徑仍然存在。 – scgough

+0

什麼是你的'FileUpload'模型?這是什麼你想改變沒有重載圖像? –

+0

@teovankot我使用簡單的模型來保存圖像的路徑。 public class FileUpload { public int FileUploadId {get;組; } public string FileURL {get;組; } } – userKG

回答

0

我認爲它可以通過檢查文件不是null,如果它不是null我們首先得到一個文件路徑和比插入並上傳新的之後,我們刪除以前的文件,如果文件可以簡單地實現null,我們沒有做任何事情,只需修改其他的東西,像這樣:

public ActionResult Edit(HttpPostedFileBase file, FileUpload fileupload) 
    { 
     if (ModelState.IsValid) 
     { 
      var model = _db.FileUploads.Find(fileupload.FileUploadId); 
      string oldfilePath = model.FileURL; 
      if (file!= null && file.ContentLength > 0) 
      { 
       var fileName = Path.GetFileName(file.FileName); 
       string path = System.IO.Path.Combine(
       Server.MapPath("~/Content/Uploads/Files/"), fileName); 
       file.SaveAs(path); 
       model.FileURL = "/Content/Uploads/Files/" + file.FileName; 
       string fullPath = Request.MapPath("~" + oldfilePath); 
        if (System.IO.File.Exists(fullPath)) 
        { 
         System.IO.File.Delete(fullPath); 
       } 
      } 

      model.OtherStuff = NewStuff; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(fileupload); 
    } 

現在如果file不包含在編輯模式下什麼,我們沒有問題,因爲我們不這樣做上傳任何內容,但如果它有價值,我們會上傳一個新文件並刪除舊文件,同時您也可以在編輯模式下爲您的用戶顯示當前文件。

+0

您的代碼不清楚。它包含一個本地entityName,但是你已經使用了db.Entry(entityName).State = EntityState.Modified;我認爲它應該是這樣的db.Entry(fileupload).State = EntityState.Modified; I – userKG

+0

@userKG我知道,這只是一個普遍的例子,因爲我不知道真名是什麼,你可以根據具體的名字來改變它,以解決你的問題嗎? –

+0

我仍然試圖解決這個問題,但不能。請張貼一些測試代碼。 – userKG

0
//Update data 
     public ActionResult Edit(int id = 0) 
     { 
      Employee em = DB.emp.Find(id); 
      return View(em); 
     } 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit(Employee fileupload, HttpPostedFileBase file) 
    { 
     if(ModelState.IsValid) 
     { 
      if (file != null) 
      { 
       string fil = System.IO.Path.GetFileName(file.FileName); 
       string path = System.IO.Path.Combine(Server.MapPath("~/Images/"), fil); 
       file.SaveAs(path); 
       fileupload.Emp_Image = "/Images/" + file.FileName; 
      } 

      DB.Entry(fileupload).State = EntityState.Modified; 
      DB.SaveChanges(); 
      return RedirectToAction("List"); 
     } 
     return View(fileupload); 
    }