2013-10-09 59 views
0

我想允许用户从服务器上下载特定文件,并让他们选择文件的名称。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"; 
}; 
+2

它完全取决于浏览器给用户一个名称的选择或用“默认”名称保存它。你无法对此做任何事情。 – deceze

回答

0

简单地改变header ("Content-Disposition: attachment; filename=$myFile");header ("Content-Disposition: attachment; filename=$chosenFileName");其中$ chosenFileName是由用户提供的名称。

+0

嗨,这就是主意,但当用户单击运行此脚本的按钮时,应该在对话框中提供$ chosenFileName –

+0

这是一个相当尴尬的解决方案。浏览器有自己的*另存为*对话框,这个解决方案创建另一个*另存为*对话框。这意味着设置自己的浏览器自动下载文件的用户 - 也就是**不希望看到*另存为*对话框的用户将看到您的对话框版本,而设置他们的用户浏览器显示一个*另存为*对话框将会看到**两个** *另存为*对话框。 –

1

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

btw。通常您为json指定MIME类型application/json - 请参阅RFC 4627

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

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

在Firefox它可以用这种方式被修改: https://support.mozilla.org/en-US/kb/change-firefox-behavior-when-open-file

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

我希望这会帮助你.. !!