我想允许用户从服务器下载特定文件,让他们选择文件名。
这是一个JSON文件。
我有以下PHP脚本可以工作,但它会自动命名文件:
if (file_exists($myFile)){
header ("Content-Type: application/download");
header ("Content-Disposition: attachment; filename=$myFile");
header("Content-Length: " . filesize("$myFile"));
$fp = fopen("$myFile", "r");
fpassthru($fp);
} else {
echo "no file exists";
};
答案 0 :(得分:1)
浏览器打开,根据内容类型保存为对话框。 在浏览器中,用户可以指定哪种mime-type应该以哪种方式打开。
顺便说一句。通常你为json指定mime类型application/json
- 参见RFC 4627
您可以尝试将类型设置为application/octet-stream
。
但正如我所写 - 这取决于用户设置。
在firefox中可以这样修改: https://support.mozilla.org/en-US/kb/change-firefox-behavior-when-open-file
答案 1 :(得分:0)
只需将header ("Content-Disposition: attachment; filename=$myFile");
更改为header ("Content-Disposition: attachment; filename=$chosenFileName");
,其中$ chosenFileName是用户提供的名称。
答案 2 :(得分:0)
步骤-1。首先点击下载按钮打开一个带有输入文件名的表单(打开弹出窗口或其他页面)
步骤 - 2现在给出文件名(我的意思是在文本框中输入名称,然后点击提交);
步骤 - 3将发送请求作为帖子(method ='POST')提交到下载文件。 这看起来像$ _POST ['filename'];
步骤4
if($_POST['filename']){
$filename = $_POST['filename'];
}
if (file_exists($myFile)){
header ("Content-Type: application/download");
header ("Content-Disposition: attachment; filename=$filename ");
header("Content-Length: " . filesize("$filename "));
$fp = fopen("$filename ", "r");
fpassthru($fp);
} else {
echo "no file exists";
};
我希望这能帮到你.. !!