gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:57:03 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com