【问题标题】:download as archive in firefox not getting full file name在firefox中下载为存档没有获得完整的文件名
【发布时间】:2015-09-02 05:36:10
【问题描述】:

我正在使用ZipArchive 库将内容下载为存档。 问题是存档文件没有得到给定的全名,它以第一个空格结尾。例如:如果我将文件名命名为“new file.zip”

header('Content-disposition: attachment; filename = new file.zip');

在谷歌搜索时,我发现只需输入带引号的文件名即可解决问题。所以我尝试了这个:

header("Content-disposition: attachment; filename = 'new file.zip'");

但没有任何变化,当下载文件名更改为“new.zip”时,我必须得到的是“new file.zip”

问题只出在火狐上

【问题讨论】:

  • 尝试转义名称中的空白(技术文件名中的空白绝不是一个好主意...):filename = new\ file.zip
  • 什么都没有改变,现在文件名变成了新的\.zip
  • 如果您的问题得到有效解决,您应该接受答案。

标签: php http-headers mozilla ziparchive content-disposition


【解决方案1】:

在下载文件之前将内容类型设置为application/zip, application/octet-stream,并在双引号中包含filename

// We'll be outputting a ZIP
header('Content-Type: application/zip, application/octet-stream');

// It will be called new file.zip
header('Content-Disposition: attachment; filename="new file.zip"');

如果你传递变量文件名,那可能有空格:

header("Content-Disposition", "attachment; filename=\"" . $fileName ."\"");

请注意,filenamedouble quotes 包围,根据RFC 2231。这允许在文件名中使用扩展字符(即国际字符)。

【讨论】:

  • 略有改动:header("Content-Disposition: attachment; filename=\"".$fileName."\"");
  • 答案只是部分正确;对 Content-Type 的更改是不正确的:它不需要,它是无效的(你不能指定两种类型),它破坏了首先声明类型的意义。
  • @JulianReschke 我们不应该通知浏览器我们将要发送的内容类型吗,虽然没有必要?
  • 是的,你应该这样做。但是“application/zip, application/octet-stream”不是内容类型,它是语法错误:-)
  • @JulianReschke 所以应该是Content-Type: application/zip?
猜你喜欢
  • 1970-01-01
  • 2022-01-11
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
  • 2019-04-08
  • 2023-03-26
相关资源
最近更新 更多