2015-07-10 56 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); 
    }