我有一个实现IHttpHandler的自定义处理程序。自定义处理程序允许我们为人们生成下载文件的动态URL。
代码看起来像这样,
public void ProcessRequest(HttpContext context)
{
context.Response.AddHeader("Content-Disposition", "attachment;filename=" + attachment.FileName);
context.Response.AddHeader("Content-Length", attachment.Fileblob.Length.ToString());
context.Response.ContentType = GetMimeType(attachment.FileName);
context.Response.OutputStream.Write(attachment.Fileblob, 0, attachment.Fileblob.Length);
}
问题在于attachment.Filename。如果文件名碰巧有这样的空格,
filename - 1.bmp
然后在Internet Explorer上它工作正常,但在Firefox上,文件下载对话框将其截断为此,
文件名
没有延期或任何事情。我也试过这个,
attachment.FileName.Replace(“”,“%20”)
再次在IE中运行,但在firefox中导致文件名在下载对话框中设置为
文件名%20-%201.bmp
我也尝试了这个,
HttpUtility.UrlEncode(attachment.FileName)
在firefox和IE中都产生了这个,
文件名+ - + 1.bmp
有什么想法吗?
答案 0 :(得分:6)
请尝试用%20
替换实际的空格字符。应该仍适用于所有浏览器。
修改强>
好的,这似乎没有帮助。然后是B计划。
让我们尝试调整我们的Content-Disposition
HTTP标头,以便根据RFC 2231将附件文件名用双引号括起来。
public void ProcessRequest(HttpContext context)
{
context.Response.AddHeader("Content-Disposition", String.Format("attachment;filename=\"{0}\"", attachment.FileName));
context.Response.AddHeader("Content-Length", attachment.Fileblob.Length.ToString());
context.Response.ContentType = GetMimeType(attachment.FileName);
context.Response.OutputStream.Write(attachment.Fileblob, 0, attachment.Fileblob.Length);
}