包含空格的文件名的TransmitFile

时间:2012-09-14 11:56:21

标签: 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();

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

我尝试使用

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

但没有奏效。

修改
此外,我无法替换(使用' _'或' - ')或删除服务器上存在的文件名中的所有空格。非常感谢一点帮助。

1 个答案:

答案 0 :(得分: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)中使用内容处置标头字段”,尤其是关于哪些字符可能会导致文件名出现问题。