如何解决自定义处理程序不喜欢Firefox上的空格
| 我有一个实现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,attachment.Fileblob.Length);
}
问题出在附件。文件名上。如果文件名恰好具有这样的空格,
文件名-1.bmp
然后在Internet Explorer上运行正常,但是在Firefox上,文件下载对话框将其截断了,
文件名
没有扩展名或其他任何内容。我也尝试过
attachment.FileName.Replace(\“ \”,\“%20 \”)
可以在IE中再次使用,但是在Firefox中,它导致在下载对话框中将文件名设置为此,
文件名%20-%201.bmp
我也尝试过
HttpUtility.UrlEncode(attachment.FileName)
在导致这种情况的Firefox和IE中,
文件名+-+ 1.bmp
有任何想法吗?
解决方法
尝试用
%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,attachment.Fileblob.Length);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。