微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

服务文件供下载浏览器忽略文件名并使用“file.nothing”代替

如何解决服务文件供下载浏览器忽略文件名并使用“file.nothing”代替

我的应用程序有一个 blazor 页面,它调用 API 函数生成报告并将该报告提供给浏览器以供下载。

为此,我使用了 ControllerBase.File 方法,指定了建议的文件名。

浏览器成功开始下载,但忽略建议的文件名。相反,给“file.nothing

我在 Chrome 和 Firefox 中都看到过这种行为。

最小的可重现示例

[HttpPost("report/level2/deliverable")]
public async Task<IActionResult> GenerateLevel2DeliverableReport()
{
    byte[] bytes = Encoding.ASCII.GetBytes("This is some text");
    string filename = "test.txt";
    return File(bytes,"text/plain",filename);
}

在实际情况中,我在返回 Word 文档和 Zip 文件及其各自的内容类型时遇到了同样的问题。

Save As Dialog

邮递员捕获的 HTTP 响应

enter image description here

内容配置(在图像中难以阅读)是

attachment; filename=test.txt; filename*=UTF-8''test.txt

有没有人对为什么浏览器忽略文件名有任何想法?

解决方法

好吧,这很尴尬。 我以为下载是由线路产生的

return File(bytes,"text/plain",filename);

但事实证明,API 调用包含在一些 JavaScript 代码中,这些代码使用正则表达式从 HTTP 标头中提取文件名并开始下载。 如果正则表达式匹配失败,则将文件名硬编码为“file.nothing” 难怪我在谷歌上搜索“file.nothing”都是徒劳的。

正则表达式存在问题,同事已修复该问题,现在一切正常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。