php - 文件下载框
-
08-07-2019 - |
题
我给用户一个下载 csv 文件的链接......只需使用
Click <a href="report.csv">here</a> to download your file.
此文本和链接显示在一个小弹出窗口中 - 高度 100 宽度 400。
如果用户单击“保存” - 那么没问题,文件将保存到他们选择的任何位置
如果他们选择“打开”,则 csv 文件将显示在小弹出窗口中。这不是我想要的 - 我更喜欢 Excel 打开并在 Excel 中显示文件,或者甚至禁用“打开”按钮可能是一个可能的选择。
我有什么想法可以实现吗?
谢谢,
解决方案
我假设您正在使用一些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");
其他提示
您无权管理用户的设置,例如哪个应用程序打开了哪种文件类型。他们必须转到他们的设置并更改文件关联。但是,请记住并非所有人都安装了Excel,因此强制用户在此特定应用程序中打开csv文件并不是一个好主意。
我也认为你不能禁用Open选项,这也是由网页浏览器的配置决定它是否会显示窗口或是否会直接启动相关的应用程序......看来你好吗?在你的特殊情况下运气不好。
我认为这是操作系统级别,无法更改。
一半解决方案是将 target =&quot; _blank&quot;
添加到代码中。这样,当用户选择“打开”选项时,至少该文件将在新的(全屏或至少可调整大小的)窗口中打开。
除此之外,你不能改变窗口的行为,正如ceejayoz所说。
- 确保在此之前没有执行任何其他输出
- 构建 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;