在一个HTTP请求中下载多个文件

时间:2010-02-25 07:21:22

标签: php http download

如何在一个HTTP请求中下载多个文件? 我的意思是,当你有多个附件并选择你想要下载的内容然后按下载这样它们将被自动下载,你不必手动点击每个附件。

我正在使用PHP作为服务器端srcipting。

8 个答案:

答案 0 :(得分:12)

可以发送multipart response in HTTP

  

通常,HTTP对多部分消息体的处理方式与任何其他媒体类型没有区别:严格地称为有效负载。 [...] HTTP用户代理应该遵循与MIME用户代理在收到多部分类型时相同或类似的行为。

     

[...]如果应用程序收到无法识别的多部分子类型,则应用程序必须将其视为等同于“multipart / mixed”。

但由于Firefox是我所知道的唯一支持此类多部分响应的浏览器(除了 multipart / byterange ),因此您应该使用一些存档文件格式。

答案 1 :(得分:8)

由于浏览器支持不佳,几乎无法使用。您可以将它们打包到服务器端的tar或zip文件中,然后提供存档文件。

答案 2 :(得分:4)

我认为这是不可能的,因为每个HTTP请求只有一个URI。

答案 3 :(得分:2)

您可以使用PHP,服务器端压缩文件,并通过设置相应的标头请求文件或从脚本中返回文件,请参阅ZipArchive class

或者您创建了一个特殊的客户端,可以解析您当时自己指定的消息格式(Flash应用程序,插件) - 但如果您的客户端只是您的浏览器,您将获得一个具有固定内容长度的响应服务器

答案 4 :(得分:0)

Dunno关于一个HTTP请求,但是如果你想要它们,你可以循环访问它们,同时在重定向到立即下载脚本的同时更改每个请求的header('Location:')。虽然,这将是多余的,丑陋的;我认为最好的方法是将它们全部压缩,有关如何在PHP Documentation中执行此操作的说明。

答案 5 :(得分:0)

我正在使用多个不可见的iframe来同时触发多个下载。将有多个HTTP请求,但效果将是您所描述的。

<iframe style="display: none;" src="file1.zip"></iframe>
<iframe style="display: none;" src="file2.zip"></iframe>
<iframe style="display: none;" src="file3.zip"></iframe>

大多数浏览器会询问用户是否允许多次下载(这是为了防止网站向文件系统发送垃圾邮件)。此外,您必须确保文件实际上已下载,而不是仅显示在不可见的iframe中(例如,在提供文件的PHP脚本中使用header('Content-disposition: attachment');)。

在我的解决方案中,我使用JavaScript在每个文件下载后更改src,因此文件按顺序加载,我的服务器必须一次处理更少的请求。但是这个解决方案需要AJAX并且要复杂得多。

答案 6 :(得分:0)

一种简单的方法是在base64中编码文件并发送JSON。不过,这会使响应大小约为4/3,因此绝对不要在大文件上使用它。

答案 7 :(得分:-2)

可能是您可以使用JS打开多个弹出窗口,每个弹出窗口都加载下载URL。我希望它是唯一的方式..

相关问题