Mos*_*she 3 html javascript php download web
我正在一个访问者应该能够下载pdf文件的网站上工作.(有三个链接可供选择,但这是无关紧要的)我想知道如何制作它,以便访问者只需点击链接而不必
right click > Save (target) As...
Run Code Online (Sandbox Code Playgroud)
我对PHP和/或Javascript解决方案持开放态度.谢谢.
编辑:我可以使用JavaScript来调用PHP并通过AJAX保存文件吗?
EDIT2:我最后使用了Nirmal的解决方案,因为对于所有三个文件来说,它是最简单的.我不需要为三个PDF制作3个文件,我也不需要手动编码开关.BalusC得到了检查,因为他/她的代码首先出现并且也做了伎俩.
Bal*_*usC 13
您基本上需要做的就是设置Content-Disposition标题attachment以获得"另存为"对话框.这是启动PHP示例:
<?php
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="foo.pdf"');
readfile('/path/to/foo.pdf');
?>
Run Code Online (Sandbox Code Playgroud)
你不能也不想用Javascript做这件事.
重要提示:由于功能较差,在MSIE中,"另存为"对话框中的默认文件名不会从content-disposition标题中派生出来,而是请求URL中pathinfo的最后一部分.要解决此问题,请将PDF文件名附加到链接,例如http://example.com/pdf/foo.pdf.您甚至可以在PHP中使用它来读取pathinfo指定的PDF文件.这是一个基本的例子pdf.php:
<?php
$file_name = $_SERVER['PATH_INFO'];
$file = '/path/to/pdf/files' . $file_name;
if (file_exists($file)) {
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="' . basename($file_name) . '"');
header('Content-Length: ' . filesize($file));
readfile($file);
} else {
header('HTTP/1.1 404 Not Found');
}
?>
Run Code Online (Sandbox Code Playgroud)
然而,这假设你已经MultiViews上,这样/pdf/会通过这个PHP文件,或至少是RewriteRule从/pdf/到/pdf.php/.
此方法的主要优点是,无论何时要添加新PDF文件或更改PDF文件名,都无需更改代码.
您甚至可以通过自动确定和设置正确的内容类型使其更通用:
<?php
$file_name = $_SERVER['PATH_INFO'];
$file = '/path/to/all/files' . $file_name;
if (file_exists($file)) {
header('Content-Type: ' . mime_content_type($file_name));
header('Content-Disposition: attachment;filename="' . basename($file_name) . '"');
header('Content-Length: ' . filesize($file));
readfile($file);
} else {
header('HTTP/1.1 404 Not Found');
}
?>
Run Code Online (Sandbox Code Playgroud)
将其命名为files.php左右,然后你有一个通用的PHP下载,你可以例如访问由http://example.com/files/foo.pdf,http://example.com/files/bar.zip,等等.
希望这可以帮助.