PHP“另存为...”文件

时间:2013-10-09 10:07:10

标签: php

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

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

3 个答案:

答案 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";
};  

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