在PHP中我正在使用
header('Content-Disposition: attachment;filename="mysong.mp3"');
强行下载某个文件。
在其中一种情况下,文件大小为零字节(即使文件存在且为3MB)。这就是为什么我问自己:filename参数如何实际获取文件?即使它嵌套在多个文件夹中,也没有路径可以达到它。
我在this RFC或其他地方找不到任何有用的内容。我可能会问一些我错过的明显事实。
答案 0 :(得分:1)
Content-Disposition: attachment;filename="mysong.mp3"
标题告诉浏览器不要尝试显示响应的主体,而是将其保存在文件中;值“mysong.mp3”是文件名的建议,但浏览器通常会询问用户要使用的名称(默认情况下提供“mysong.mp3”)。
这行代码不会从磁盘读取任何文件,也不会将任何内容发送回浏览器。你的代码必须这样做。它可以从文件中读取内容或动态生成或通过任何其他方式生成;这完全取决于你。
例如,如果您在文件中包含内容,则可以执行以下操作:
$filepath = '/foo/bar/file.mp3'; // put the correct file path and name here
header('Content-Disposition: attachment;filename="mysong.mp3"');
header('Content-Length: '.filesize($filepath));
readfile($filepath);
Content-Length
标头不是必需的,但是浏览器生成一个很好的进度条,估计剩余时间并在传输结束时知道文件是否成功传输(当它收到时)很有用宣布的字节数)或出错的地方(收到的字节数减少)。