Zip archive utility for react-native
If you're using react-native after v0.40.0, please install this package via the
next
branch. Issues and PR are welcome to make it into master and released.
npm install react-native-zip-archive --save
- In Xcode, in the project navigator right click
Libraries
➜Add Files to [your project's name]
- Go to
node_modules
➜react-native-zip-archive
and addRNZipArchive.xcodeproj
- Add
libRNZipArchive.a
(from 'Products' under RNZipArchive.xcodeproj) to your project'sBuild Phases
➜Link Binary With Libraries
phase - Add the
libz
library to your target - Look for Header Search Paths and make sure it contains both
$(SRCROOT)/../react-native/React
and$(SRCROOT)/../../React
- mark both as recursive - Run your project (
CMD+R
)
Warning: If you're using rnpm to link this module, you also need manually link libz
library to your target otherwise your project wouldn't compile.
-
Edit
android/settings.gradle
to look like this (without the +):rootProject.name = 'MyApp' include ':app' + include ':react-native-zip-archive' + project(':react-native-zip-archive').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-zip-archive/android')
-
Edit
android/app/build.gradle
(note: app folder) to look like this:apply plugin: 'com.android.application' android { ... } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.0.0' compile 'com.facebook.react:react-native:0.16.+' + compile project(':react-native-zip-archive') }
-
Edit your
MainActivity.java
(deep inandroid/app/src/main/java/...
) to look like this (note two places to edit):package com.myapp; + import com.rnziparchive.RNZipArchivePackage; .... @Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), + new RNZipArchivePackage() ); } }
require it in your file
const ZipArchive = require('react-native-zip-archive')
you may also want to use something like react-native-fs to access the file system (check its repo for more information)
const RNFS = require('react-native-fs')
unzip(source: string, target: string): Promise
unzip from source to target
Example
let sourcePath = 'path_to_your_zip_file'
let targetPath = RNFS.DocumentDirectoryPath
ZipArchive.unzip(sourcePath, targetPath)
.then(() => {
console.log('unzip completed!')
})
.catch((error) => {
console.log(error)
})
unzipAssets(assetPath: string, target: string): Promise
unzip file from Android
assets
folder to target path
Note: Android only.
assetPath
is the relative path to the file inside the pre-bundled assets folder, e.g. folder/myFile.zip
. Do not pass an absolute directory.
const assetPath = 'folder/myFile.zip'
const targetPath = RNFS.DocumentDirectoryPath
ZipArchive.unzipAssets(assetPath, targetPath)
.then(() => {
console.log('unzip completed!')
})
.catch((error) => {
console.log(error)
})
subscribe(callback: ({progress: number})): EmitterSubscription
Subscribe to unzip progress callbacks. Useful for displaying a progress bar on your UI during the unzip process.
Your callback will be passed an object with the following fields:
progress
(number) a value from 0 to 1 representing the progress of the unzip method. 1 is completed.
Note: Remember to unsubscribe! Run .remove() on the object returned by this method.
componentWillMount() {
this.zipProgress = ZipArchive.subscribe((e) => {
this.setState({ zipProgress: e.progress })
})
}
componentWillUnmount() {
// Important: Unsubscribe from the progress events
this.zipProgress.remove()
}