自定义处理程序不喜欢Firefox上的空格

时间:2011-05-26 04:54:10

标签: c# asp.net

我有一个实现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

有什么想法吗?

1 个答案:

答案 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);
}