Windows 上的 Chrome 在下载的文件中添加尾随下划线?

2024-03-10

我遇到了一个相当奇怪的情况,我很难在现有的 Django 应用程序中进行追踪。当用户进行 POST 调用时,继承自 APIView 的视图之一会返回一个文件。端点工作正常,但当下载的文件到达客户端计算机时,会发生一些奇怪的情况。当浏览器收到文件时,文件扩展名已被重命名,并带有尾随下划线。 (因此假设文件最初是“test.txt”,客户端收到的版本将是“test.txt_”)。

据我所知,就在 APIView 中返回响应对象之前,内容类型和内容处置标头看起来是正确的。例如。:

Content-Type: application/octet-stream
Content-Disposition: attachment;filename="test.txt"

当该文件出现在 Chrome 下载中时,其名称为“test.txt_” - 后面带有下划线。我在 Firefox 中尝试过同样的操作,似乎可以正确下载。不幸的是,告诉我们的大多数用户切换浏览器是行不通的。

我努力了:

  • 强制使用不同的内容类型(例如:尝试“应用程序/文本”而不​​是“应用程序/八位字节流”,只是为了看看会发生什么)。这没有效果。
  • 内容设置的格式略有不同(例如:分号和文件名之间的空格)。这也没有效果。
  • 删除了内容处置标头中文件名周围的双引号。没有效果。
  • 在 Rest Framework 本身内删除断点,但 Visual Studio Code 似乎不会触发这些断点。 (我不太熟悉通过 Visual Studio Code 进行调试,所以这可能是我的错)。
  • 去掉任何自定义中间件,所以剩下的中间件如下:
corsheaders.middleware.CorsMiddleware
django.contrib.sessions.middleware.SessionMiddleware
django.middleware.locale.LocaleMiddleware
django.middleware.common.CommonMiddleware
django.middleware.csrf.CsrfViewMiddleware
django.contrib.auth.middleware.AuthenticationMiddleware
django.contrib.messages.middleware.MessageMiddleware

到目前为止,其他人遇到的任何类似问题似乎都略有不同(即:Internet Explorer 删除了扩展名中的句点并用下划线替换)。

你猜猜这里可能会发生什么吗?我有点难住了。


您必须从文件名中删除“”

Change attachment; filename="filename.txt" to attachment; filename=filename.txt

虽然看起来文件名中不能有空格

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 上的 Chrome 在下载的文件中添加尾随下划线? 的相关文章

随机推荐