【发布时间】:2016-01-05 15:42:57
【问题描述】:
这是我上传图片的 MVC 控制器。我正在尝试检查是否
文件存在,然后删除旧文件并保存新文件。我在System.IO.File.Delete() 收到错误消息,告诉我该文件已在使用中,但我不知道我在哪里打开它以及如何关闭它。
[HttpPost]
public ActionResult UploadImage(int? id, HttpPostedFileBase file, EmployeeViewModel employee)
{
Employee employeeData = db.Employees.Find(id);
if (file != null && file.ContentLength > 0)
{
// Assemble File Path/Extension String
string[] fileSplit = file.FileName.Split('.');
string extension = fileSplit[1];
var fileNameNew = "employeeImage-" + id + "." + extension;
var path = Path.Combine(Server.MapPath("~/Content/employeeImages/"), fileNameNew);
var fileExists = System.IO.File.Exists(path);
if (fileExists)
{
System.IO.File.Delete(path);
file.SaveAs(path);
}
else
{
file.SaveAs(path);
}
}
return RedirectToAction("Edit", new { id = id });
}
【问题讨论】:
-
您是否尝试过重启您的网络服务器?
-
是的,我什至重新启动了我的机器
-
这听起来可能很愚蠢,但我还是会问。您在哪里选择要上传的源图像?好久没做ASP.NET了,不记得是怎么做上传的了,但是以前总是要写一个httphandler来处理文件上传。另一个快速的想法,您不必删除现有文件,只需将其保存到新文件,添加时间戳,这样您就可以一直保留员工的旧照片(看看是否有效)
-
我通过网页和文件输入元素添加它。我会考虑尝试跳过删除并使用时间戳,我试图使用简单的命名约定“employeeImage-ID.extension”来简化文件检索,但我可以添加时间戳并搜索最新的一个在检索时具有匹配 ID。
-
是否有任何网络方法或其他代码可以检索图像(而不是 url),使其作为流打开?您还可以使用名为
handlebysysinternals的命令行程序,它可以显示哪个进程打开了文件。您可以将其用于手动故障排除,以确定打开的文件是什么。 technet.microsoft.com/en-us/sysinternals/handle.aspx