包含空格的文件名的TransmitFile

Pra*_*hav 2 asp.net string httpresponse response.transmitfile

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

    Stirng 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();
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是当文件名包含任何空格时,下载的文件只有第一个单词的名称.例如:如果我的文件名是"This is demo.txt",则下载的文件名将变为"This"而没有扩展名.因此,下载它的用户无法识别其类型.
我们怎样才能避免因包含空格的文件名而发生?

我试过用

Stirng file_path="'"+Server.MapPath("~/files/"+file_name)+"'"; 
Run Code Online (Sandbox Code Playgroud)

但没有工作.

编辑:
我也不能替换(用'_'或' - ')或删除服务器上存在的文件名中的所有空格.非常感谢一点帮助.

And*_*ton 9

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

HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + file_Name + "\"");
Run Code Online (Sandbox Code Playgroud)

如果你使用VS2015或更高版本,你可以使字符串插值更整洁:

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

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

有关完整的详细信息,请参阅RFC 6266 "在超文本传输​​协议(HTTP)中使用内容处置标头字段",尤其是关于哪些字符可能导致文件名出现问题.