gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:28:19 24 4
gpt4 key购买 nike

我正在寻找一种可靠的方法来根据给定页面上的信息即时创建 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com