【问题标题】:Edit image delete old image file or replace image编辑图像删除旧图像文件或替换图像
【发布时间】:2019-07-18 16:14:26
【问题描述】:

我正在将图像上传到文件夹并将详细信息保存在 SQL 数据库中。这一切都很好,但是在编辑时如何删除旧文件或者简单地用新文件覆盖旧文件?这是添加和编辑的代码:

谢谢, 乙

添加:

[HttpPost]
                        public ActionResult AddDocument(Document newDocument, HttpPostedFileBase file)
                        {
                            string fileExtension = System.IO.Path.GetExtension(file.FileName);
                            string fileName = System.IO.Path.GetFileName(file.FileName);
                            string filePath = "/Documents/" + newDocument.Department + "/" + fileName;
                            file.SaveAs(Server.MapPath(filePath));

                            db.Documents.Add(new Document
                            {
                                DocumentName = fileName,
                                Document_url = filePath,
                                Department = newDocument.Department,
                                DocumentType = fileExtension,
                                Description = newDocument.Description
                            }
                                );
                            db.SaveChanges();
                            return RedirectToAction("Index");
                        }

编辑:

                         [HttpPost]
                                public ActionResult EditDocument(int id, Document document)
                                {
                                    try
                                    {
                                        db.Entry(document).State = System.Data.Entity.EntityState.Modified;
                                        db.SaveChanges();
                                        return RedirectToAction("DocumentDetails", new { id = id });
                                    }
                                    catch
                                    {
                                        return View();
                                    }
                                }


                         [HttpPost]
                                public ActionResult EditDocument(int id, Document document)
                                {
                                    try
                                    {
                                        db.Entry(document).State = System.Data.Entity.EntityState.Modified;
                                        db.SaveChanges();
                                        return RedirectToAction("DocumentDetails", new { id = id });
                                    }
                                    catch
                                    {
                                        return View();
                                    }
                                }

【问题讨论】:

  • 在编辑操作中,从磁盘中删除文件(或者如果您愿意,可以将其保留为历史记录)- 您从document.Document_url 中知道当前文件的位置。然后将新的file 数据分配给document,尽管您没有将任何file 传递给编辑操作,所以这本身就是一个问题。此外,您通过用户上传的文件的名称将文件名保存到磁盘 - 如果 2 个用户上传一个名称相同的文件会发生什么?将元数据保存到数据库更安全,然后将文件写入磁盘并通过它在数据库中的主键命名(id)。
  • @GregH 你是对的。要删除旧文件,您还可以定义一个属性并用它装饰 Edit 方法。在该属性中,您拥有已编辑图像的 ID。

标签: asp.net-mvc


【解决方案1】:

这是您可以做到的一种方式。

public ActionResult EditDocument(int id, Document document, HttpPostedFileBase file)
{            
    //NOTE that you only need one of the parameters id or document, my example is using document
    try
    {
        string fileExtension = System.IO.Path.GetExtension(file.FileName);
        string fileName = System.IO.Path.GetFileName(file.FileName);
        string filePath = "/Docs/" + document.Department + "/" + fileName;
        document.DocumentType = fileExtension;
        document.Document_url= filePath;
        document.DocumentName = fileName;

        var oldDocument = db.Documents.First(m => m.Id == document.Id);
        //or var oldDocument = db.Documents.First(m => m.Id == id); //if that is how you get the id
            //you can delete the file here or leave it in storage never referenced in the db
            FileInfo myfileinf = new FileInfo(Server.MapPath(oldDocument.Document_url));
        //check if file exists before deleting
        if (System.IO.File.Exists(myfileinf.FullName))
        {
            System.IO.File.Delete(myfileinf.FullName);
        }
        file.SaveAs(Server.MapPath(filePath));
        //set the old document here
        db.Entry(oldDocument).CurrentValues.SetValues(document);
        db.Entry(oldDocument).State = System.Data.Entity.EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("EditDocument", new { id = id });
    }
    catch(Exception e)
    {
        return View();
    }
}

你也可以看看我的回答here看看有没有帮助

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 2019-10-30
    • 2016-06-11
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2013-01-25
    • 2020-02-17
    • 2019-03-23
    相关资源
    最近更新 更多