我一直在寻找一个前端JS解决方案来解决这个问题/在浏览器中强制下载文件的概念。基本上,我想让浏览器通过js事件下载文件。我知道在HTML5中我们有下载属性,但它只在Chrome中受到支持,最终用户仍然需要实际点击链接,我无法触发它。但缺乏浏览器支持对我的需求来说更成问题。强迫文件下载与PHP头影响我的带宽?
所以,我以为我会使用PHP和“内容处置:附件”这是伟大的工作,但现在它的服务器端的代码,我不知道是否会影响我的带宽。下载的文件是外部文件,并不在我的服务器上。
此外,虽然“download.php?file = http://domain.com/image.jpg”为我下载文件,我无法弄清楚如何通过ajax请求下载以“下载.php?file = http://domain.com/image.jpg“
任何想法?
这里是PHP代码的一部分:
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";");
header("Content-Transfer-Encoding: binary");
readfile("$filename");
好,以及启动对前端下载一个办法是应用X-框架,选项报头的download.php然后在iframe中打开图像,作为内容添加到的download.php:
header('X-Frame-Options: DENY');
然后做到这一点用JS/jQuery的:
$("body").append(<iframe src="download.php?file=http://domain.com/image.jpg"></iframe>);
但是我仍然在使用download.php并且会得到一个带宽成本,所以它并不理想。任何其他想法?我只想在页面上显示一堆图像,并允许用户单击一个按钮将它们全部下载。图片不是由我托管的,我不想带宽受到影响。
在下载HTML5属性而言,不能够触发它,jQuery的点击或触发点击失败,但是这个代码确实让我来触发程序下载:
var clickEvent = document.createEvent("MouseEvent");
clickEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
$("a")[0].dispatchEvent(clickEvent);
但是,这个下载属性只在Chrome中支持,所以我越来越近,但还没有。任何人?
你能显示一些代码吗?你的问题到底是什么 - 我不太了解Ajax如何进入这里 – 2012-02-14 17:32:16
Ajax无法做文件下载 - 这是一个后台操作。您需要使用'window.location ='download.php .....“来强制执行前台操作。 – 2012-02-14 17:40:42
我下载的php文件效果很好,你去它下载一个在查询中指定的文件,当我去download.php?file = http://domain.com/image.jpg - 它下载http:// domain.com/image.jpg,但我正尝试下载多个文件,因此我想为每个文件的download.php调用(ajax调用)。我可以让ajax调用返回图像,但不能下载它。 – iwek 2012-02-14 17:42:59