IE中不支持给定路径的格式

时间:2015-06-29 12:37:34

标签: asp.net-mvc internet-explorer

我想在asp.net中保存上传的excel文件。在Chrome中,这很好用:

if (Request.Files.Count > 0)
{
    var currentUser = User.Identity.GetUserId();
    var file = Request.Files[0];

    if (file != null && file.ContentLength > 0)
    {
        var fileName = string.Format(DateTime.Now.ToString("yyyy-MM-dd HH_mm_ss_") + file.FileName);
        var path = Path.Combine(Server.MapPath("~/Documents/"), string.Format("{0}", fileName));
        file.SaveAs(path);
        uploadModel.Document = fileName;
    }
}

在Chrome中是var fileName" 2015-06-29 14_33_53_example.xlsx"在IE中,fileName是" 2015-06-29 14_21_00_C:\ example.xlsx"。并通过执行file.SaveAs(path);

抛出错误

我如何支持IE?

2 个答案:

答案 0 :(得分:5)

尝试使用System.IO.Path.GetFileName来解析IE发送的完整路径。这适用于所有浏览器:

var parsedFileName = Path.GetFileName(file.FileName);
var fileName = string.Format(DateTime.Now.ToString("yyyy-MM-dd HH_mm_ss_") + parsedFileName );

Here is a link to a MSDN blog detailing the issue

答案 1 :(得分:1)

显然IE正在为您提供完整的路径。使用System.IO.Path.GetFileName()方法仅提取文件名:

var fileName = string.Format(
    DateTime.Now.ToString("yyyy-MM-dd HH_mm_ss_") + 
    Path.GetFileName(file.FileName));

有关GetFileName()的更多信息,请查看MSDN documentation on Path.GetFileName。如果参数只是文件名,则返回值将是文件名本身。