在 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 上解压缩文件的任何方式的主要内容,如果未能解决你的问题,请参考以下文章
在 Google App Engine 上解压缩 Java 中的大 blob