在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)+"'";
但没有奏效。
修改
此外,我无法替换(使用' _'或' - ')或删除服务器上存在的文件名中的所有空格。非常感谢一点帮助。
答案 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)中使用内容处置标头字段”,尤其是关于哪些字符可能会导致文件名出现问题。