如何在ASP.Net MVC中更新上传的文件并删除旧的文件

时间:2015-07-10 07:53:50

标签: asp.net-mvc asp.net-mvc-5

我想在编辑模式下编辑其他内容,但我不想在编辑模式下重新上传图像文件,该模式已在创建模式下上传。所以我想在编辑模式下查看图像的路径。

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" />

}

我已经使用创建操作/查看方法上传了该文件。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分: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在编辑模式中不包含任何内容,我们就没有问题,因为我们没有上传任何内容,但如果它有值,我们上传新文件并删除旧文件,您也可以在编辑模式下为您的用户显示当前文件。