我有一个实现 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 上。如果文件名恰好有这样的空格,
文件名 - 1.bmp
然后在 Internet Explorer 上它工作正常,但在 Firefox 上文件下载对话框将其截断为这样,
文件名
没有扩展名或任何东西。这个我也试过,
附件.FileName.Replace("", "%20")
它在 IE 中再次工作,但在 firefox 中它导致在下载对话框中将文件名设置为此,
文件名%20-%201.bmp
我也试过,
HttpUtility.UrlEncode(附件.文件名)
在 firefox 和 IE 中都是这样,
文件名+-+1.bmp
有什么想法吗?
最佳答案
尝试用 %20
替换实际的空格字符。应该仍然适用于所有浏览器。
编辑
好的,所以这似乎没有帮助。那么,B 计划。
让我们尝试调整我们的 Content-Disposition
HTTP header ,以便根据 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);
}
关于c# - 自定义处理程序不喜欢 Firefox 上的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6133838/