JSPM

  • Created
  • Published
  • Downloads 32721
  • Score
    100M100P100Q148892F
  • License MIT

A little wrapper on ZipArchive for react-native

Package Exports

  • react-native-zip-archive

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-native-zip-archive) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

React Native Zip Archive npm npm

Zip archive utility for react-native

IMPORTANT

For react-native < 0.58, use react-native-zip-archive@3.0.1 For react-native >= 0.58, use react-native-zip-archive@4.0.0

Installation

npm install react-native-zip-archive --save

Linking

Automatically (Recommend)

react-native link react-native-zip-archive

Manually

iOS

refer to the official guide, remember to also link libz, libiconv and Security to your target.(You can follow the tutorial on this)

Android

  • 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')
    }
  • For react-native blew 0.19.0

    • Edit your MainActivity.java (deep in android/app/src/main/java/...) to look like this (note two places to edit):
    + import import com.rnziparchive.RNZipArchivePackage;
    
    ....
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mReactRootView = new ReactRootView(this);
    
        mReactInstanceManager = ReactInstanceManager.builder()
          .setApplication(getApplication())
          .setBundleAssetName("index.android.bundle")
          .setJSMainModuleName("index.android")
          .addPackage(new MainReactPackage())
    +     .addPackage(new RNZipArchivePackage())
          .setUseDeveloperSupport(BuildConfig.DEBUG)
          .setInitialLifecycleState(LifecycleState.RESUMED)
          .build();
    
        mReactRootView.startReactApplication(mReactInstanceManager, "ExampleRN", null);
    
        setContentView(mReactRootView);
      }
  • react-native 0.19.0 and higher

    • Edit your MainActivity.java (deep in android/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()
        );
      }
    
    }
  • For react-native 0.29.0 and higher ( in MainApplication.java )

    • Edit your MainApplication.java (deep in android/app/src/main/java/...) to look like this (note three places to edit):
    + import com.rnziparchive.RNZipArchivePackage;
    
    public class MainApplication extends Application implements ReactApplication {
      ...
        @Override
        protected List<ReactPackage> getPackages() {
          return Arrays.<ReactPackage>asList(
    -       new MainReactPackage()
    +       new MainReactPackage(),
    +       new RNZipArchivePackage()
          );
        }

Usage

import it into your code

import { zip, unzip, unzipAssets, subscribe } from '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)

import { MainBundlePath, DocumentDirectoryPath } from 'react-native-fs'

API

zip(source: string, target: string): Promise

zip source to target

Example

const targetPath = `${DocumentDirectoryPath}/myFile.zip`
const sourcePath = DocumentDirectoryPath

zip(sourcePath, targetPath)
.then((path) => {
  console.log(`zip completed at ${path}`)
})
.catch((error) => {
  console.log(error)
})

zipWithPassword(source: string, target: string, password: string, encryptionType: string): Promise

zip source to target

NOTE: encryptionType is not supported on iOS yet, so it would be igonred on that platform.

Example

const targetPath = `${DocumentDirectoryPath}/myFile.zip`
const sourcePath = DocumentDirectoryPath
const password = 'password'
const encryptionType = 'STANDARD'; //possible values: AES-256, AES-128, STANDARD. default is STANDARD

zipWithPassword(sourcePath, targetPath, password, encryptionType)
.then((path) => {
  console.log(`zip completed at ${path}`)
})
.catch((error) => {
  console.log(error)
})

unzip(source: string, target: string): Promise

unzip from source to target

Example

const sourcePath = `${DocumentDirectoryPath}/myFile.zip`
const targetPath = DocumentDirectoryPath
const charset = 'UTF-8' 
// charset possible values: UTF-8, GBK, US-ASCII and so on. If none was passed, default value is UTF-8


unzip(sourcePath, targetPath, charset)
.then((path) => {
  console.log(`unzip completed at ${path}`)
})
.catch((error) => {
  console.log(error)
})

unzipWithPassword(source: string, target: string, password: string): Promise

unzip from source to target

Example

const sourcePath = `${DocumentDirectoryPath}/myFile.zip`
const targetPath = DocumentDirectoryPath
const password = 'password'

unzipWithPassword(sourcePath, targetPath, password)
.then((path) => {
  console.log(`unzip completed at ${path}`)
})
.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 = `${DocumentDirectoryPath}/myFile.zip`
const targetPath = DocumentDirectoryPath

unzipAssets(assetPath, targetPath)
.then(() => {
  console.log('unzip completed!')
})
.catch((error) => {
  console.log(error)
})

subscribe(callback: ({ progress: number, filePath: string })): EmitterSubscription

Subscribe to the progress callbacks. Useful for displaying a progress bar on your UI during the 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.
  • filePath (string) the zip file path of zipped or unzipped file.

Note: Remember to check the filename while processing progress, to be sure that the unzipped or zipped file is the right one, because the event is global.

Note: Remember to unsubscribe! Run .remove() on the object returned by this method.

componentDidMount() {
  this.zipProgress = subscribe(({ progress, filePath }) => {
    this.setState({ zipProgress: progress })
  })
}

componentWillUnmount() {
  // Important: Unsubscribe from the progress events
  this.zipProgress.remove()
}