【问题标题】:Can't open file from IE when using content-disposition attachment and very long file name使用内容处置附件和很长的文件名时无法从 IE 打开文件
【发布时间】:2014-10-19 17:04:10
【问题描述】:

我正在使用非常简单的代码从 ASP .NET Web 应用程序下载文件。当文件名长度为 134 个或更多符号时,问题出在 Internet Explorer 中。显示标准对话框(“您要从 localhost 打开或保存 123456789012345678901234567890123456....pdf 吗?”)。但是,当单击“打开”按钮时,什么也没有发生。没有问题,当文件名长度较短时,即133。

我的代码:

string fileName = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.pdf";
byte[] fileData = File.ReadAllBytes(Server.MapPath("~/document.pdf"));           

Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
Response.OutputStream.Write(fileData, 0, fileData.Length);
Response.Flush();
Response.End();

【问题讨论】:

  • 即使在 2014 年,您的路径长度也可能不会总是超过 255(并且 open 会将其存储在很长的路径中) - 这可能是您的问题。
  • 谢谢你,Grumbler85。它帮助我更改了 IE 设置中的临时 Internet 文件目录。

标签: asp.net internet-explorer attachment content-disposition


【解决方案1】:

Chrome 足够聪明,可以在完整路径超过 251 个字符时截断文件名。在 Windows 上,Chrome 默认会保存到 C:\users\<username>\Downloads,这样可以启用更大的文件。

IE 11 方法是跳过打开/保存点击,将取消设为您唯一有效的选择,而无需告知用户原因。 IE 会阻止较长的文件名,因为它会保存到已经很长的路径 C:\Users\<username>\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\XXXXXXXX

方法 #1:服务器端截断

如果您可以控制 HTTP 响应中的附件文件名,并且客户端是 IE,您应该将附件文件名截断为一些 MAX # of chars考虑默认 IE 保存位置)。

const int MaxFilenameLength = 140;
string fileName = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.pdf";
bool isIEBrowser = Request.Browser.Browser == "IE" || Request.Browser.Browser == "InternetExplorer";
if (fileName.Length > MaxFilenameLength && isIEBrowser)
    fileName = fileName.Substring(0, MaxFilenameLength); 
\\...
Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
\\...

方法#2:客户端默认保存路径

如果您无法控制服务器,则需要将 IE 中的默认保存位置更改为更短的路径,可能使用 Chrome 使用的路径 --> C:\users\<username>\Downloads。转到 IE Internet 选项-->设置-->移动文件夹...

MS IE 团队需要修复这个错误,因为用户只能猜测该怎么做。对我来说,这是一个客户端 (IE 11) 问题。

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 2011-06-02
    • 1970-01-01
    • 2014-10-21
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    相关资源
    最近更新 更多