2

在 C# ASP.Net 网站中,将文件传输到我正在使用的客户端

String file_path = Server.MapPath("~/files/"+file_name); 
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + file_Name);
HttpContext.Current.Response.TransmitFile(file_path);        
HttpContext.Current.Response.End();

它工作得很好,但是当文件名包含任何空格时,下载的文件的名称只能到第一个单词。例如:如果我的文件名是,"This is demo.txt"那么下载的文件名将变为"This"没有扩展名。因此,下载它的用户无法识别其类型。
对于包含空格的文件名,我们如何避免发生这种情况?

我尝试使用

String file_path = "'"+Server.MapPath("~/files/"+file_name)+"'";

但它没有用。

我也无法替换(用'_'或'-')或删除服务器上存在的文件名中存在的所有空格。

4

1 回答 1

9

您应该将文件名括在引号中。

HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + file_Name + "\"");

如果您使用的是 VS2015 或更高版本,则可以使用字符串插值使其更整洁:

HttpContext.Current.Response.AddHeader("Content-Disposition", $"attachment;filename=\"{file_Name}\"");

此外,标题中的文件名不必与文件名相同。标题中的文件名只是对用户的建议。

有关完整的详细信息,请参阅RFC 6266 “在超文本传输​​协议 (HTTP) 中使用 Content-Disposition 标头字段”,尤其是关于哪些字符可能会导致文件名出现问题。

于 2012-09-14T12:11:18.890 回答