用于移动设备的HTTP标头“内容类型:应用程序/强制下载”的实用程序


Utility of HTTP header "Content-Type: application/force-download" for mobile?

我目前正在开发一个PHP脚本,该脚本允许您通过访问链接从移动设备下载媒体内容(视频,音频,图片等(。(即 http://www.my-web-site.com/download.php?id=7ejs8ap(当我使用最近的手机(三星Galaxy S,iPhone 4S,其他一些......(进行测试时,我的脚本工作非常出色,但是我的旧手机三星C3050发生了错误。我想下载的媒体只是一个音频mp3文件,我通常很容易下载。

错误显示为"未知内容类型"。因此,由于我唯一的HTTP标头内容类型是"应用程序/强制下载",因此我尝试对此进行注释并重试。然后,它起作用了。但是现在,我目前正在问这种内容类型是什么意思,以及它是否可以强制要求其他人移动。我在iPhone 4上测试了没有内容类型并且它可以工作,但我不确定所有移动设备的兼容性。

有人可以解释一下该内容类型是如何工作的,为什么这不是标准的MIME或其他所有可以帮助我确保这是每次下载的可选内容类型,无论我正在下载的文件,浏览器或设备是什么?

谢谢大家。

这是我发送的 PHP 标头:

<?php
//Assume that $filename and $filePath are correclty set.
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$filename.'"');
// header('Content-Type: application/force-download'); Non-standard MIME-Type, incompatible with Samsung C3050 for example. Let it commented
readfile($filePath);
?>
编辑:我

刚刚尝试使用索尼Xperia,下载不成功:我只看到我要下载的文件的"html编码"字节。如果应用程序/八位字节流或应用程序/强制下载不起作用,我如何知道我必须使用哪种内容类型?

Content-Type: application/force-download的意思是"我,网络服务器,会向你(浏览器(撒谎这个文件是什么,这样你就不会把它当作PDF/Word文档/MP3/任何东西,并提示用户将神秘文件保存到磁盘"。这是一个肮脏的黑客,当客户端不执行"保存到磁盘"时,它会严重中断。

为您使用的任何媒体使用正确的 MIME 类型(例如 audio/mpeg mp3(。

如果要鼓励客户端下载 Content-Disposition: attachment; etc etc 标头,而不是遵循默认行为,请使用 标头。

要下载文件,请使用以下代码...将文件名和位置存储在变量$file。它支持所有哑剧类型

$file = "location of file to download"
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);

要了解 Mime 类型,请参阅此链接:http://php.net/manual/en/function.mime-content-type.php

application/force-download不是

标准的MIME类型。这是某些浏览器支持的黑客,最近添加的。

你的问题真的没有任何意义。这就像问为什么Internet Explorer 4不支持最新的CSS 3功能。