在 react-native 上解压缩文件的任何方式

Posted

技术标签:

【中文标题】在 react-native 上解压缩文件的任何方式【英文标题】:Any way to unzip file on react-native 【发布时间】:2017-05-28 14:31:46 【问题描述】:

设法将 .zip 文件下载到我在手机上的文件系统。但过了一会儿意识到我找不到解压缩该文件的方法。正如我尝试的那样:

https://github.com/plrthink/react-native-zip-archive https://github.com/remobile/react-native-zip

第一个在要求后立即死亡,出现错误“无法读取未定义的属性'unzip'”(仔细按照说明进行操作)

第二个死了,因为它依赖 codrova 端口来反应原生,这也不起作用。

有解决这些问题的建议或方法吗?

使用 react-native 0.35,在 Note4 上使用 android 5.1.1 进行测试。

【问题讨论】:

请分享代码 您可能会采取错误的步骤来添加项目。 好的,我试试整合 让我们continue this discussion in chat. 你是在用这个lib for android吗? 【参考方案1】:

我确实设法最终解决了我的问题:

使用 react-native-zip-archive

解决方案是更改内部代码: 模块内的 RNZipArchiveModule.java 文件

需要应用的更改写在此注释中: https://github.com/plrthink/react-native-zip-archive/issues/14#issuecomment-261712319

感谢hujideyang解决问题。

【讨论】:

【参考方案2】:

往这个方向走: node_modules\react-native-zip-archive\android\src\main\java\com\rnziparchive\RNZipArchiveModule.java

并替换此代码而不是解压缩方法

public static void customUnzip(File zipFile, File targetDirectory) throws IOException 
    ZipInputStream zis = new ZipInputStream(
            new BufferedInputStream(new FileInputStream(zipFile)));
    try 
      ZipEntry ze;
      int count;
      byte[] buffer = new byte[8192];
      while ((ze = zis.getNextEntry()) != null) 
        File file = new File(targetDirectory, ze.getName());
        File dir = ze.isDirectory() ? file : file.getParentFile();
        if (!dir.isDirectory() && !dir.mkdirs())
          throw new FileNotFoundException("Failed to ensure directory: " +
                  dir.getAbsolutePath());
        if (ze.isDirectory())
          continue;
        FileOutputStream fout = new FileOutputStream(file);
        try 
          while ((count = zis.read(buffer)) != -1)
            fout.write(buffer, 0, count);
         finally 
          fout.close();
        
            /* if time should be restored as well
            long time = ze.getTime();
            if (time > 0)
                file.setLastModified(time);
            */
      
     finally 
      zis.close();
    
  

  //**************************

  @ReactMethod
  public void unzip(final String zipFilePath, final String destDirectory, final String charset, final Promise promise) 
    new Thread(new Runnable() 
      @Override
      public void run() 
        try 
          customUnzip(new File(zipFilePath ) , new File(destDirectory));
         catch (IOException e) 
          e.printStackTrace();
        




         
    ).start();
  

【讨论】:

以上是关于在 react-native 上解压缩文件的任何方式的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 8 上解压缩存档

如何在OSX上解压缩omni.ja?

在 Google App Engine 上解压缩 Java 中的大 blob

text Power Shell:在Windows 10上解压缩

怎么解压压缩包

文件压缩格式如何影响我的火花处理