【发布时间】: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