如何使用一个HTTP请求下载多个文件?

时间:2009-06-24 23:51:38

标签: http browser multipart

使用案例:用户点击网页上的链接 - 繁荣!加载位于其文件夹中的文件 我尝试使用multipart/mixed message打包文件,但它似乎只适用于Firefox

这就是我的回答:

HTTP/1.0 200 OK
Connection: close
Date: Wed, 24 Jun 2009 23:41:40 GMT
Content-Type: multipart/mixed;boundary=AMZ90RFX875LKMFasdf09DDFF3
Client-Date: Wed, 24 Jun 2009 23:41:40 GMT
Client-Peer: 127.0.0.1:3000
Client-Response-Num: 1
MIME-Version: 1.0
Status: 200

--AMZ90RFX875LKMFasdf09DDFF3 
Content-type: image/jpeg 
Content-transfer-encoding: binary 
Content-disposition: attachment; filename="001.jpg" 

<< here goes binary data >>--AMZ90RFX875LKMFasdf09DDFF3 
Content-type: image/jpeg 
Content-transfer-encoding: binary 
Content-disposition: attachment; filename="002.jpg" 

<< here goes binary data >>--AMZ90RFX875LKMFasdf09DDFF3 
--AMZ90RFX875LKMFasdf09DDFF3--

谢谢你

P.S。不,压缩文件不是一个选项

4 个答案:

答案 0 :(得分:33)

Zipping是唯一可以在所有浏览器上获得一致结果的选项。如果它不是一个选项,因为你不知道拉链可以动态生成,那么它们可以。如果它不是一个选项,因为你对zip文件有好心,那么......

MIME / multipart用于向HTTP服务器发送电子邮件和/或POST。它从未打算在HTTP事务的客户端接收和解析。有些浏览器确实实现了它,有些浏览器没有实现它。

作为另一种选择,您可以使用JavaScript脚本打开Windows下载单个文件。或者Java Applet(在机器上需要Java Runtimes,如果它是一个企业应用程序,那应该不是问题[因为NetAdmin可以在工作站上部署它]),它会将文件下载到用户选择的目录中。

答案 1 :(得分:1)

记得在10年前的netscape 4天内做这个&gt;它使用的边界就像你在做什么,当时在其他浏览器上根本不起作用。

虽然它没有回答你的问题,但HTTP 1.1支持请求流水线操作,因此至少可以重复使用相同的TCP连接来下载多个图像。

答案 2 :(得分:0)

您可以使用base64编码将(非常小的)图像嵌入到HTML文档中,但是从浏览器/服务器的角度来看,您在技术上仍然只发送1个文档。也许这就是你打算做的?

Embedd Images into HTML using Base64

编辑:我刚刚意识到我在谷歌搜索中找到的大多数方法只支持firefox,而不支持iE。

答案 3 :(得分:0)

您可以使用多个数据 url 制作一个 json。

例如:

{
    "stamp.png": "data:image/png;base64,...",
    "document.pdf": "data:application/pdf;base64,..."
}