0

我想允许用户从服务器下载特定文件并让他们选择文件名。

它是一个 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";
};  
4

3 回答 3

1

浏览器会根据内容类型打开另存为对话框。在浏览器中,用户可以指定哪种 mime 类型应该以哪种方式打开。

顺便提一句。通常您为 json 指定 mime 类型 application/json- 请参阅 RFC 4627

您可以尝试将类型设置为application/octet-stream.

但正如我所写 - 这取决于用户设置。

在 firefox 中可以这样修改:https: //support.mozilla.org/en-US/kb/change-firefox-behavior-when-open-file

于 2013-10-09T10:14:40.510 回答
0

步骤1 。首先,当单击下载按钮时,打开一个带有输入文件名的表单(打开弹出窗口或其他页面)

Step - 2 现在给出文件的名称(我的意思是在文本框中输入名称并单击提交);

步骤 - 3 将发送请求作为帖子(方法 = '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";
};  

我希望这能帮到您 ..!!

于 2013-10-09T10:35:15.447 回答
0

只需更改header ("Content-Disposition: attachment; filename=$myFile");header ("Content-Disposition: attachment; filename=$chosenFileName");$chosenFileName 是用户提供的名称。

于 2013-10-09T10:10:37.623 回答