如果文件上传的名称已经在指定路径中,则显示错误。我想用新文件替换。我已经放错了和代码。请帮助替换现有图像。
错误:进程无法访问文件'',因为它正由另一个进程使用。
代码:
[HttpPost]
public ActionResult MyUpload(HttpPostedFileBase file)
{
string filePath = string.Empty;
string path = "C:\\";
string filePath = string.Empty;
try
{
if (file != null && file.ContentLength > 0)
{
filePath = path + file.FileName;
file.SaveAs(filePath);
file.InputStream.Dispose();
GC.Collect();
// other operations, where can occur an exception
// (because the uploaded file can have a bad content etc.)
}
}
catch (Exception e)
{
}
}
答案 0 :(得分:0)
根据您发布的内容,我建议如下:
[HttpPost]
public ActionResult Foo(HttpPostedFileBase file)
{
var path = @"C:\";
var filename = file.FileName;
file.SaveAs(System.IO.Path.Combine(path, filename));
// do stuff here.
return RedirectToAction("Index");
}
答案 1 :(得分:0)
我有同样的问题。我有一个名为"文件"的子文件夹。我使用file.SaveAs()
上传文件的位置('文件'属于' HttpPostedFileBase' [使用MVC])。经过一些本地调查和在线研究后,发现IIS工作线程/进程正在锁定我的文件。起初我以为{HttpPostedFileBase}.SaveAs()
以某种方式锁定了我的文件。我甚至尝试(先)关闭,然后处置{HttpPostedFileBase}.InputStream
,这也没有帮助。最后,它根本与文件上传过程无关。上传文件(PDF)后,我使用ITextSharp处理它,但忘记处理对象包装器(因此它可能位于GC中)。因此,由于锁定的现有文件,下一个文件上载失败。顺便说一句,我也试过了file.InputStream.Dispose(); file.InputStream.Close(); GC.Collect();
,但最终将它们全部删除了,现在它仍然完美无缺。最重要的是,如果IIS工作进程正在锁定您的文件,那么可能是一个很好的理由 - 您的代码中某处缺少某些内容,而且很可能MVC框架或IIS本身并不流氓。 ;)另外,事实证明,如果文件存在,{HttpPostedFileBase}.SaveAs()
将覆盖文件,因此无需先删除它们。
另一个提示:我根据您的授权设置方式(无论您是否使用IIS进程标识或登录的用户标识)在某处查看是否正在创建文件。在某些情况下,一个登录用户可能会创建一个文件,然后该用户将成为所有者,而另一个用户的另一个同名文件可能会被阻止;在特殊情况下(如基于Intranet的Web应用程序)可能需要牢记。