48

我目前正在编写一个 PHP 脚本,它允许您通过访问链接从移动设备下载媒体内容(视频、音频、图片...)。(即http://www.my-web-site.com/download.php?id=7ejs8ap)当我用最近的手机(三星 Galaxy S、iPhone 4S、其他一些... ) 但我的旧手机三星 C3050 出现错误。我想下载的媒体只是一个我通常很容易下载的音频 mp3 文件。

错误似乎是“未知的内容类型”。因此,由于我唯一的 HTTP 标头 Content-Type 是“application/force-download”,我尝试对此发表评论并重试。然后,它起作用了。但是现在,我目前正在询问此 Content-Type 的含义以及它是否对其他移动设备是强制性的。我在 iPhone 4 上没有 Content-Type 的情况下进行了测试,它可以工作,但我不确定这种兼容性是否适用于所有移动设备。

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

谢谢大家。

这是我发送的 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);
?>

编辑:我刚刚尝试使用 Sony Xperia,但下载不成功:我只看到要下载的文件的“html 编码”字节。如果 application/octet-stream 或 application/force-download 不起作用,我怎么知道我必须使用什么内容类型?

4

3 回答 3

132

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

为您使用的任何媒体(例如audio/mpegmp3)使用正确的 mime 类型。

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

于 2012-05-16T10:34:43.813 回答
16

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

$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

于 2012-05-16T09:42:06.120 回答
3

application/force-download不是标准的 MIME 类型。这是最近添加的一些浏览器支持的 hack。

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

于 2012-05-16T10:36:34.363 回答