1

如果文件正在以指定路径中已经存在的名称上传,则显示错误。我想用新文件替换。我已经放置了错误和代码。请帮助替换现有图像。

错误:该进程无法访问文件“”,因为它正被另一个进程使用。

代码:

[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)
    {
    }
}
4

2 回答 2

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");
}
于 2014-03-04T19:40:39.867 回答
0

我遇到了同样的问题。我有一个名为“files”的子文件夹,我使用file.SaveAs()(“file”类型为“HttpPostedFileBase”[使用 MVC])上传文件。经过一些本地调查和在线研究,事实证明 IIS 工作线程/进程正在锁定我的文件。起初我以为{HttpPostedFileBase}.SaveAs()以某种方式锁定了我的文件。我什至尝试(首先)关闭,然后处理{HttpPostedFileBase}.InputStream,这也没有帮助。最后,它甚至根本与文件上传过程无关。上传文件(PDF)后,我使用 ITextSharp 对其进行了处理,但忘记处理对象包装器(因此它可能位于 GC 中)。因此,由于锁定现有文件,下一次文件上传失败。顺便说一句,我也试过file.InputStream.Dispose(); file.InputStream.Close(); GC.Collect();,但最终将它们全部删除,现在仍然可以正常工作。最重要的是,如果 IIS Worker 进程正在锁定您的文件,那么可能有一个很好的理由 - 您的代码中的某个地方丢失了某些东西,而且很可能不是 MVC 框架或 IIS 本身变得流氓。;) 此外,事实证明,{HttpPostedFileBase}.SaveAs()如果文件存在,将覆盖文件,因此无需先删除它们。

另一个提示:我在某处阅读以查看谁在根据您的授权设置方式创建文件(无论您是否使用 IIS 进程身份或登录用户身份)。在某些情况下,一个文件可能由一个登录用户创建,然后成为所有者,而另一个用户的同名文件可能会被阻止;在特殊情况下(例如基于 Intranet 的 Web 应用程序)可能需要牢记。

于 2015-03-19T18:51:43.497 回答