php - 文件下载框

时间:2009-10-28 14:30:05

标签: php download savefiledialog filedialog

我正在给用户一个下载csv文件的链接......只需使用

Click <a href="report.csv">here</a> to download your file.

此文本和链接显示在一个小弹出窗口中 - 高度100宽度为400。

如果用户点击“保存” - 那么没问题则将文件保存到他们选择的任何地方

如果他们选择“打开”,则会在小弹出窗口中显示csv文件。这不是我想要的 - 我更喜欢excel打开并在excel中显示文件,甚至禁用“打开”按钮可能是一种可能的选择。

我有什么想法可以实现吗?

谢谢,

5 个答案:

答案 0 :(得分:4)

我假设您正在使用一些javascript打开该弹出框..所以我建议不要显示/打开您的小“下载”弹出框,而是在网页上显示此链接。因此,当有人点击链接时强制浏览器下载文件,如果他们希望打开它,他们可以并且可能得到一个与浏览器窗口大小一样宽的视图。

//例如,要强制下载zip文件,请将标题发送为

// Set headers
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$file");
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: binary");

答案 1 :(得分:1)

您无权管理用户的设置,例如哪个应用程序打开了哪种文件类型。他们必须转到他们的设置并更改文件关联。但是,请记住并非所有人都安装了Excel,因此强制用户在此特定应用程序中打开csv文件并不是一个好主意。

我也认为你不能禁用Open选项,这也是由网页浏览器的配置决定它是否会显示窗口或是否会直接启动相关的应用程序......看来你好吗?在你的特殊情况下运气不好。

答案 2 :(得分:0)

我认为这是操作系统级别,无法更改。

答案 3 :(得分:0)

一半解决方案是将target="_blank"添加到代码中。这样,当用户选择“打开”选项时,至少该文件将在新的(全屏或至少可调整大小的)窗口中打开。

除此之外,你无法改变窗口的行为,正如ceejayoz所说。

答案 4 :(得分:-1)

  • 确保在此之前不做任何其他输出
  • 构建csv字符串并将其存储在$ csvString
  • 在$ csv_filename
  • 中为其指定相应的文件名
  • 标题应告诉浏览器将其加载到Excel中

    header("Cache-Control: maxage=1");

    header("Pragma: public");

    header("Content-Type: application/vnd.ms-excel");

    header("Expires: 0");

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

    header("content-disposition: attachment;filename=$csv_filename");

    echo $csvString;