如何即时压缩和传递文件到浏览器?

Posted

技术标签:

【中文标题】如何即时压缩和传递文件到浏览器?【英文标题】:How to zip and pass-through files to browser on-the-fly? 【发布时间】:2012-01-05 14:58:10 【问题描述】:

我想实现像 GMail 的“获取所有附件为压缩文件”这样的功能。

有没有办法在服务器上选择多个文件,压缩它们并即时传递到浏览器? (类似于 php 的函数 readfile 用于附件流)

[编辑]

您似乎误解了我的意图,所有给出的示例都需要创建并关闭存档发送之前,我想在存档创建时进行流式传输。

类似于 unix 命令的东西(来自 zip 手册): zip -r - . | dd of=/dev/nrst0 obs=16k

[EDIT2]

我有大量 ~2MB 文件(> 100 个)要服务,等待创建 tmp zip 文件强制实现排队机制并占用存储空间...如果可以通过流/管道直接到浏览器完成,为什么我应该在 filesyetm 中写 tmp zip 吗?

【问题讨论】:

php.net/manual/en/zip.examples.php 我已经阅读了这个例子......但没有解决方案。 哦,你的意思是一个完整的、编码的解决方案,直到最后一个字符,如“give me teh codez”? @Piskvor 不,我可以处理这个编码,但我必须有一些提示,而不是链接到我仔细阅读过的页面,它的内容在我的情况下似乎没用。 等等,所以您不是试图将文件压缩成一个文件?通过readfile 将单个文件提供给浏览器似乎是相当简单的最后一步。 【参考方案1】:

您的 PHP 主机可能恰好安装了 zip extension。 如果是这样,你应该使用它。 (性能原因)

否则,对于 zip 归档,没有依赖关系的好库是 PclZip。

显然有一个PEAR library,但现在已被弃用,重点已转移到我已经提到的PECL(二进制)扩展上。 (反正整个 PEAR 生态系统都在逐渐腐烂)

【讨论】:

【参考方案2】:

看看ZipStream-PHP library - 它声称可以满足您的需求。

【讨论】:

以上是关于如何即时压缩和传递文件到浏览器?的主要内容,如果未能解决你的问题,请参考以下文章

使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器

PHP中的压缩流

PHP中的压缩流

JavaScript 即时编译

如何即时从 hyper::Response 解压缩 XZ 数据?

无法即时生成 ZIP 文件并将其发送到用户的浏览器以供下载