javascript - 使用 Flash + JavaScript 进行客户端压缩

标签 javascript flash zip

我正在寻找一种可靠的方法来根据给定页面上的信息即时创建 zip 存档并使其可供下载。客户端压缩是必须的,因为我的脚本是从书签运行的。

虽然我更关心编写脚本的其余部分,但我的第一种方法只是将信息发布到本地服务器上运行的几行 PHP,然后将其压缩并发回。这显然不适合做一个值得分享的书签。

我今天早些时候找到了 JSZip,我以为它就此结束。这个库在工作时效果很好;不幸的是,我创建的文件经常超过几 MB,这会破坏 JSZip。 (注意:我只在 Chrome 上测试过。)

由于数据 URI,纯 JS 下载也有时髦名称的限制,我打算使用 JSZip 推荐的方法解决这个问题,使用 Downloadify,它使用 Flash。这让我想知道是否可以/已经通过使用 Flash 和 JS 的类似相互作用来克服 JS zip 生成的大小限制。

我用谷歌搜索了这个,但由于没有使用 Actionscript 的经验,我无法快速弄清楚我所问的是否可行。是否可以使用 JS 中的 Flash 对象在客户端创建相对较大(10 MB 以内)的 zip 文件?

谢谢!

最佳答案

首先是一些数字:

  • Flash promise 如果文件小于 100 Mb(我不知道它是指 base 10 还是 base 16),上传将正常进行。

  • Flash 中有两个流行的库可用于创建 ZIP 存档,但请先阅读。

  • ZIP archiver 是一个压缩和归档数据的程序,它完全按照这个顺序执行。 IE。它分别压缩每个文件,然后将其附加到整个存档。这会产生更差的压缩率,但允许迭代创建存档。好处是您甚至可以在文件完全压缩之前开始发送文件。

  • ZIP 的替代方法是首先使用专用的存档器,然后一次压缩整个存档。这有时可以实现好几倍的压缩,但代价是您必须一次处理数据。

  • 但闪存 ByteArray.compress()方法为您提供 deflate 算法的 native 实现,这与您在 ZIP 归档程序中使用的大致相同。因此,如果您实现了 tar 之类的功能,就可以显着减少所发送文件的大小。

  • 但是 Flash 是单线程环境,因此您必须注意压缩数据的大小,并且可能必须根据经验找出它。或者只使用 ZIP——更多冗余,但更容易实现。

我以前用过这个库:nochump .没有任何问题。虽然,它有点旧,尝试将它移植到使用 Alchemy 操作码(用于快速内存访问,显着降低低级二进制算术运算的成本,如二进制或、二进制等)可能是有意义的。 This library实现 CRC32 算法,这是 ZIP 存档的重要组成部分,并且它使用 Alchemy - 因此它应该快得多,但您必须自己实现其余部分。

您可能会考虑的另一个选择是 Goole 的 NaCl - 您可以从存档器和压缩实现中进行选择,因为它本质上运行 native 代码,因此您甚至可以使用 bz2 和其他现代东西 - 不幸的是,仅在 Chrome 中(并且用户必须启用它)或 Firefox(需要插件)。

关于javascript - 使用 Flash + JavaScript 进行客户端压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10274535/

相关文章:

javascript - 选择文档后,react-native-document-picker 应用程序关闭/崩溃

flash - 参数错误 : Error #2015: Invalid BitmapData

linux - 让 swfupload.js 在 Linux 中工作的任何解决方法?

java - 在Java中将韩语字符写入压缩的csv文件

python - 使用 ZipFile 模块从 zipfile 中删除文件

javascript - 在 react 状态下将列表中的项目插入到另一个列表中

javascript - Karma + Jasmine 测试异步方法

python - 使用 zip 文件从 URL 中提取数据时出现属性错误

javascript - 与自定义 HTML 元素共享样式?

string - As3在回车票上拆分