想要强制下载资源而不是直接在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标题中,那么流行浏览器采用的各种方案和编码是什么?
出于这个问题的目的,流行的浏览器是:
当我正在使用以下代码从服务器下载文件:
Response.AddHeader("Content-Disposition", "attachment; filename=" +
Server.UrlPathEncode(Path.GetFileName(_Filename)));
Run Code Online (Sandbox Code Playgroud)
问题是在文件名中有空格时,使用此代码,服务器会在找到第一个空格时自动拆分!
我希望知道为什么以及解决方案是什么?
我正在尝试为我的用户生成并返回文件.某些文件名包含unicode字符:aäa.pdf.当尝试在IE 9中下载它们时,文件名被破坏,下载如下所示:

在Chrome中,它按预期工作.这是return语句:
return File(fileStream: stream,
contentType: System.Net.Mime.MediaTypeNames.Application.Octet,
fileDownloadName: myModel.Name + "." + pub.OutputFileType);
Run Code Online (Sandbox Code Playgroud)
我该如何解决IE 9的问题?
.net utf-8 filestreamresult internet-explorer-9 asp.net-mvc-3
根据RFC 2396,
加号"+",美元"$"和逗号","字符已添加到
"保留"集中的字符,因为它们在查询组件中被视为保留字符.
确实,搜索这个网站"加+逗号,美元$",你得到
https://stackoverflow.com/search?q=plus+%2B+comma+,+dollar+ $
Plus仅在未被用作分隔符时进行编码(由应用程序).
但正如其他人所观察到的那样,.NET的UrlDecode功能将加号转换为空间.指定了这种行为在哪里?
我正在从ASP.NET页面向浏览器发送文件.要正确发送文件名,我要添加标题:
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
Run Code Online (Sandbox Code Playgroud)
问题是当文件包含空格(例如"abc def")时,浏览器只接收文件名的"abc"部分.我试过:Server.HtmlEncode但它没有帮助.
你知道如何解决这个问题吗?
PK
我有一个名为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)