【问题标题】:Unzipping file in phonegap using zip.js使用 zip.js 在 phonegap 中解压缩文件
【发布时间】:2016-01-18 22:04:31
【问题描述】:

我正在使用 PhoneGap Cordova 3.3.0 和最新版本的zip.js。该脚本能够获取存档中的文件列表,但无法获取任何二进制数据。我正在使用Hugeen 的修复程序,但没有运气。

function decompress(fullsavepath, filename){
    zip.useWebWorkers = false;
    file_system.root.getFile("app_cache/temp.zip", {}, function(fileEntry){
        fileEntry.file(function (file) {

            zip.createReader(new zip.BlobReader(file), function(reader) {

                // get all entries from the zip
                reader.getEntries(function(entries) {
                    if (entries.length) {
                        //Output zip file contents
                        for(var i=0; i<entries.length;i++){
                            console.log(entries[i].filename);
                        }

                        //Try to decompress file no. 3
                        console.log('---- entries[2] '+entries[2].filename);
                        entries[2].getData(new zip.BlobWriter(), function(unzipData){
                            console.log(unzipData);
                        },null, null);
                    }
                });
            }, null);

        })

    },null);
}

这是我的控制台日志以及相关消息:

Console: ----entries[2] photoalbum/bpage1.jpg at file:///android_asset/www/dl/index.html:315
Console: processMessage failed: Message: S01 File821048650 AUEsDBBQAAAAIAEFVCEMFqmCrQAsHAMa3BwASAAAA at file:///android_asset/www/cordova.js:1034
Console: processMessage failed: Error: TypeError: undefined is not a function at file:///android_asset/www/cordova.js:1035
Console: processMessage failed: Stack: TypeError: undefined is not a function
Console:     at inflate (file:///android_asset/www/dl/js/vendor/zip/zip.js:429:18)
Console:     at file:///android_asset/www/dl/js/vendor/zip/zip.js:600:16
Console:     at BlobWriter.init (file:///android_asset/www/dl/js/vendor/zip/zip.js:297:4)
Console:     at file:///android_asset/www/dl/js/vendor/zip/zip.js:596:12
Console:     at [object Object].<anonymous> (file:///android_asset/www/dl/js/vendor/zip/zip.js:203:5)
Console:     at file:///android_asset/www/plugins/org.apache.cordova.core.file/www/FileReader.js:352:20
Console:     at Object.callbackFromNative (file:///android_asset/www/cordova.js:292:54)
Console:     at processMessage (file:///android_asset/www/cordova.js:1029:21)
Console:     at Function.processMessages (file:///android_asset/www/cordova.js:1063:13)
Console:     at pollOnce (file:///android_asset/www/cordova.js:933:17) at file:///android_asset/www/cordova.js:1036

------ 更新 2014-04-07 -------------

最后我们使用了另一种方法来解决问题。 Google 为 Android 和 iOS 开发了原生插件 - https://github.com/MobileChromeApps/zip

这很简单,老实说,这是我们使用的罕见插件之一,它在第一次尝试时就成功完成了我们需要的工作。

例子:

 zip.unzip("cdvfile://localstorage/downloaded.zip", 
           "cdvfile://localstorage/my_data/path/", 
           function(){
              console.log('Zip decompressed successfully');
           }
 );

PS:Cordova 已经更新到 3.4.0 - 我最初的问题使用了像 file:///android_asset/www 这样的路径,这些路径已经全部替换为新的 cdvfile://

【问题讨论】:

  • 愚蠢的问题,但以防万一:您是否添加了权限 WRITE_EXTERNAL_STORAGE ?
  • 嗨@QuickFix,是的,我有。我试图解压的文件首先是从 HTTP 下载的,然后这个脚本会接管并解压它。
  • 你在这方面有什么进展吗?
  • 谢谢,我试试!!
  • 如果你解决了,请添加为答案并用选定的答案标记它。谢谢

标签: cordova unzip cordova-3


【解决方案1】:

-- 从我上面的编辑中复制--

最后我们使用了另一种方法来解决问题。 Google 为 Android 和 iOS 开发了一个原生插件 - https://github.com/MobileChromeApps/zip

这很简单,老实说,这是我们使用的罕见插件之一,它在第一次尝试时就成功完成了我们需要的工作。

例子:

 zip.unzip("cdvfile://localstorage/downloaded.zip", 
           "cdvfile://localstorage/my_data/path/", 
           function(){
              console.log('Zip decompressed successfully');
           }
 );

PS:Cordova 已更新至 3.4.0 - 我最初的问题使用了 file:///android_asset/www 之类的路径,这些路径已全部替换为新的 cdvfile://

【讨论】:

  • 您对性能的体验如何?解压缩较大的文件需要很长时间。 130MB 大约需要 10 分钟。在我的 S5 上。
  • 我们使用的是 Galaxy Tab 2 和 Nexus 5。我们的文件大小相似,大约 90-120MB,其中包含大约 80MB 的视频和一些较小的 JPG 和 HTML。解压缩大约需要 3-4 分钟。为 Tab 2 从 SD 卡执行读/写。
  • 好吧,我认为我的性能问题是由于文件数量 - 大约 50.000 个非常小的 JPG(地图图块)。
  • 这总是返回-1
  • @JamesWong 不再需要了。我最终编写了自己的插件。完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多