如何让浏览器下载文件而不更改其名称/扩展名?

时间:2013-05-24 14:43:59

标签: http-headers download content-type file-extension content-disposition

问题:是否可以在没有浏览器更改文件名的情况下将文件从Web浏览器下载到用户的计算机?

背景:我有一个共享软件应用程序,用户可能会购买许可证来激活它。许可证是XML文件,但扩展名为“.mlic”,而不是“.xml”。 mlic是我的应用程序识别的特殊文件扩展名。用户付费后,他们会被重定向到我的PHP脚本,该脚本会推送mlic文件和相关的HTTP标头。我的剧本如下。

问题:有些人告诉我文件下载为license.xml或license.mlic.xml,他们不知道如何处理这个文件。我不知道这些人正在使用什么浏览器或操作系统。我无法复制。我的应用程序仅限Mac,因此这与OS X有关。

解决方案:可以做些什么吗?是否有明确指定文件扩展名的HTTP标头?

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"license.mlic\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $filesize($input_path));

ob_end_flush();
@readfile($input_path);

2 个答案:

答案 0 :(得分:0)

1)删除无用/未定义的标头字段,例如Content-Transfer-Encoding和Content-Description。

2)不,你不能阻止浏览器根据他们检测到的内容类型调整扩展名。

答案 1 :(得分:0)

有一些http标头明确指定了文件扩展名。为此你应该将content-Type设置为例如pdf文件的“application / pdf”或excel文件的“application / ms-excel”