【问题标题】:Can't download files. Garbage code displays无法下载文件。垃圾代码显示
【发布时间】:2013-01-06 20:50:04
【问题描述】:

我有 Drupal 网站,但我的用户无法再下载文件。 (docx、xlsx 等)。 仅在 Firefox 中,当用户单击链接下载文件时,页面会显示垃圾代码。

我在别处读到的解决方案是添加以下内容,但没有奏效。相反,每次重新加载页面时,都会提示用户针对应用程序类型进行虚拟下载。

drupal_set_header('Content-type: application/octet-stream; charset=utf-8');

我有一个简单的模块,它有一个页面可以显示文件的链接。在这个模块中,我将上述内容添加到 hook_init() 函数中。

我以前从未遇到过这个问题,我不确定它为什么会开始。任何帮助当然将不胜感激。如果我在有人回复之前找到了解决方案,我会在此处发布以供将来参考。

【问题讨论】:

  • 另外,这只发生在 Firefox 中。

标签: php drupal drupal-6 http-headers download


【解决方案1】:

为您的 MIME 试一试:

drupal_set_header('Content-type: application/force-download');

【讨论】:

  • 不幸的是,这也不起作用。也许我实施错了?我尝试将它放在 hook_init 和 page_callback 本身中。两种情况都没有奏效。每次刷新页面时,都会提示我下载同名“application/force-download”的虚拟文件。我必须继续我的搜索。也许是一个 JS 解决方案......嗯......
  • 哇,抱歉,我刚刚看到这个弹出窗口。你有没有弄清楚这个问题?我认为任何基于 JS 的东西都没有帮助——似乎是 MIME/浏览器问题。如果一切都失败了,您可以用几行压缩文件并让他们下载?
  • 最后,没有什么能像我希望的那样奏效。因为这个问题只存在于 FireFox 用户,所以我决定使用一个变通方法,这样我就可以解决其他问题。谢谢!
【解决方案2】:

发生这种情况是因为 MIME 类型设置不正确。 您可以强制 Drupal 将 content-type header 设置为适当的 MIME 类型,或者在服务器端设置它。

我建议您在文件夹中的 .htaccess 文件中执行此操作(默认为站点/默认/文件)

只需将以下代码放入 .htaccess 文件中(或者如果它不存在,您可以创建一个新的 .htaccess 文件)。

AddType  application/octet-stream  .doc .xls .pdf

请注意,hook_init() 会在每个正常页面请求时触发。 永远不要在这个钩子中这样做,否则你最终会面临很多问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 2013-07-10
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多