如何即时压缩和传递文件到浏览器?
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图片压缩后上传给服务器