【问题标题】:Android HTTP header attachment filename ignoredAndroid HTTP 标头附件文件名被忽略
【发布时间】:2012-03-15 16:38:42
【问题描述】:

我经营着一家商店,人们可以下载他们购买的 mp3。他们输入的下载 mp3 的 URL 格式为:

http://domainName/download.php?a=123&b=456

这是我的 php 程序发送到浏览器的典型标头(使用 Fiddler 捕获):

Cache-Control: must-revalidate, post-check=0, pre-check=0
Content-Type: audio/mpeg
Content-Length: 3011430
Content-Disposition: attachment;filename="AIR FOR PIPES.MP3";

在 Android 平板电脑(ASUS Transformer)上,无论是 4.0 之前还是 4.0 之后,下载的文件名为“download.php”,而不是“AIR FOR PIPES.MP3”。换句话说,浏览器会忽略附件文件名。至少这首歌即使使用 .php 后缀也能正常播放!奇怪的是,在三星 Charge Android 2.3.6 手机上,文件名是“AIR_FOR_PIPES.MP3”(手机添加了下划线,这很好)。在 Windows 上,此代码在 IE、Firefox、Chrome 和 Safari 上运行良好。只有平板电脑让我对文件名感到悲伤。

其他网站建议我必须在“;”之后没有空格并且 mp3 必须大写 - 解决方案也不是。其他信息表明这是 POST 的一个已知错误,但如您所见,我只做 GET。我也尝试过指定“application/octet-stream”,但没有区别。

是否有一些平板电脑设置导致文件最初被称为“无标题”但最终存储为“download.php”? (我的平板电脑已加密 - 不确定这是否相关。)

编辑/回答:(论坛不会让我回答我自己的问题) 显然,平板电脑不会容忍附加文件名中的空格。我删除了它们,文件名被正确记录为 AIRFORPIPES.MP3。

【问题讨论】:

  • 您是否在您的 Transformer 上尝试过不同的浏览器(例如 firefox、完整的 chrome 等...),看看它是特定 Android 版本中的东西,还是 android 中的股票浏览器?
  • 是的,我尝试了 Chrome Beta,它现在可用于 ICS。它提供与股票浏览器相同的结果。我今天晚些时候可以在平板电脑上试用 Firefox...

标签: android http header filenames tablet


【解决方案1】:

我相当肯定这最终是一个浏览器实现问题。 (Here 的帖子描述了 IE 与该标头有关的问题)。许多制造商定制浏览器,因此看到 Android 设备之间的实现差异并不令人震惊。 Marc B 关于尝试不同浏览器的建议是一个很好的建议。很遗憾,我怀疑您会找到解决此问题的设置。

【讨论】:

  • 当我的平板电脑在 ICS 下失败时,我确实很惊讶它在我老板的 Droid 手机上运行。
【解决方案2】:

论坛现在让我回答我自己的问题。正如上面在我的编辑中提到的,Android 平板电脑不接受文件名中的空格,也不接受下划线,即使 Droid 手机将空格转换为下划线! Android 平板电脑将 AIR%20FOR%20PIPES 转换为 AIR FOR PIPES,但 Droid 手机将其转换为 AIR 20FOR 20PIPES,所以真正的通用解决方案是在发送标头之前从文件名中删除空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多