想要强制下载资源而不是直接在Web浏览器中呈现资源的Web应用程序Content-Disposition在表单的HTTP响应中发出标头:
Content-Disposition: attachment; filename=FILENAME
该filename参数可用于建议浏览器下载资源的文件的名称.但是,RFC 2183(Content-Disposition)在2.3节(文件名参数)中指出文件名只能使用US-ASCII字符:
当前[RFC 2045]语法将参数值(以及因此内容处理文件名)限制为US-ASCII.我们认识到允许在文件名中使用任意字符集的巨大愿望,但是定义必要的机制超出了本文档的范围.
然而,有经验证据表明,当今大多数流行的Web浏览器似乎都允许非US-ASCII字符(缺乏标准)对编码方案和文件名的字符集规范不同意.问题是,如果文件名"naïvefile"(没有引号,第三个字母是U + 00EF)需要编码到Content-Disposition标题中,那么流行浏览器采用的各种方案和编码是什么?
出于这个问题的目的,流行的浏览器是:
我有一个名为AttachmentDownload.aspx的文件,里面的Page_Load方法有这样的代码提供下载文件.所有名称在IE中都能正常工作,但名称中包含";" 要么 "#".它们为用户提供了名为"AttachmentDownload.aspx"的文件保存.这有解决方法吗?
这是一个例子:
var fileName = Server.UrlPathEncode (";%.txt");
Response.AddHeader("content-disposition", String.Format("attachment;filename=\"{0}\"", fileName));
Response.WriteFile(path);
Response.End();
Run Code Online (Sandbox Code Playgroud) 我在aspnet mvc中有一个返回FileContentResult的动作.我注意到当fileDownloadName包含变音符号(即åäöü)时,Internet Explorer根本无法读取文件名.
我试过UrlEncoding:
return this.File(document.Content, contentType, Server.UrlEncode(document.Name));
Run Code Online (Sandbox Code Playgroud)
但是所有空格都被加号(+)代替.
有没有办法让unicode文件名与IE一起工作(保持原始文件名完整)?
这就是我目前正在使用的黑客攻击:
return this.File(
document.Content,
contentType,
Server.UrlEncode(document.Name).Replace('+',' '));
Run Code Online (Sandbox Code Playgroud)
(这在IE中将空格渲染为下划线)