单击<a>
标记时,如何强制保存文件下载对话框?远程服务器上有一个PDF文件,当用户点击该链接时,我们要将该PDF文件下载到本地系统。
由于
答案 0 :(得分:3)
更改标题值..
实施例
header('Content-Disposition: attachment; filename="downloaded.pdf"')
path = "path/to/file.pdf";
$filename = "file.pdf";
header('Content-Transfer-Encoding: binary'); // For Gecko browsers mainly
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($path)) . ' GMT');
header('Accept-Ranges: bytes'); // For download resume
header('Content-Length: ' . filesize($path)); // File size
header('Content-Encoding: none');
header('Content-Type: application/pdf'); // Change this mime type if the file is not PDF
header('Content-Disposition: attachment; filename=' . $filename); // Make the browser display the Save As dialog
答案 1 :(得分:3)
通常,当您链接文件时,该文件将始终显示在浏览器内部,因为浏览器会加载该文件并根据文件扩展名自动确定内容类型。因此,当您点击像jpg图像pdf等链接时,浏览器知道它是图像/文件并将显示该文件。您当然可以使用浏览器快捷菜单并使用“目标另存为”选项将文件保存到磁盘。
如果要在从服务器端单击链接时自动执行此操作,则必须自己发回文件,并在输出中添加几个自定义标头。这样做的方法是使用Response.TransmitFile()
从ASP.NET应用程序中显式发送文件,然后添加Content Type和Content-Disposition标头。
所以你需要在下面使用标题谎言:
header('Content-Disposition: attachment; filename="filename.pdf"');
这是一个可能对你有所帮助的例子:
http://www.west-wind.com/weblog/posts/2007/May/21/Downloading-a-File-with-a-Save-As-Dialog-in-ASPNET
答案 2 :(得分:-6)
从主机下载内容时,他所寻找的并不是一个开放的保存对话。
他希望从客户端的文件系统中打开一个文件。您必须使用输入类型文件才能执行此操作。但是你不会获得使用javascript来操纵它的特权。
并且没有办法通过标准html提示窗口的保存对话。
我们需要ActiveX或Flash来实现它。