使用php头强制下载文件会影响我的带宽吗


Does forcing file download with php headers affect my bandwidth?

我正在寻找一个前端js解决方案来解决这个问题/在浏览器中强制下载文件的概念。基本上,我想让浏览器通过一些js事件下载一个文件。我知道在HTML5中我们有下载属性,但它只在Chrome中受支持,最终用户仍然必须点击链接,我无法触发它。但缺乏浏览器支持对我的需求来说更成问题。

所以,我想我会使用PHP和"内容处置:附件",这很好,但现在它是服务器端代码,我想知道它是否会影响我的带宽。下载的文件是外部的,不存在于我的服务器上。

此外,当"download.php"文件时=http://domain.com/image.jpg"为我下载文件,我不知道如何通过ajax请求启动下载"download.php?文件=http://domain.com/image.jpg"

有什么想法吗?

以下是php代码的一部分:

header("Content-Disposition: attachment; filename='"".basename($filename)."'";" );
header("Content-Transfer-Encoding: binary");
readfile("$filename");

好吧,在前端启动下载的一种方法是将X-Frame-Options标头应用于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中支持,所以我离它越来越近了,但还没有达到。任何人

看起来您正在使用PHP获取远程文件,然后请求的web浏览器将从您的PHP服务器下载。是的,它必须将原始源的全部内容复制到服务器,并将复制的内容发送到浏览器,从而影响带宽。

从本质上讲,你有一个基本的代理,如果你不过滤下载请求的链接,发送大文件请求的人可能会滥用它来耗尽你的数据传输限制。

此外,我不明白你为什么要从AJAX请求开始下载,即使这是可能的。要下载的文件不应影响加载的页面。

如果我转到一个页面,它开始自动下载文件,我会单击"取消"并关闭浏览器。我怀疑很多其他人也会有同样的看法,希望浏览器制造商也会有同感。如果提示我"你想下载这个文件吗",我会很高兴。

要回答您的问题,如果文件是从服务器B下载的,那么服务器B上的带宽将受到影响。