react-native-zip-archive
TypeScript icon, indicating that this package has built-in type declarations

7.0.1 • Public • Published

React Native Zip Archive npm

Zip archive utility for react-native

Attention

In order to comply with the new privacy policy of the App Store on iOS, you need to upgrade react-native-zip-archive to version 7.0.0, which requires the deployment target to be iOS 15.5 or later.

For Expo Users

The only way to make this work with Expo is to create a dev build, the expo go is not supported.

Compatibility

react-native version react-native-zip-archive version
^0.60 ^5.0.0
^0.58 ^4.0.0
<0.58 ^3.0.0

Installation

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

Linking

For iOS, run the command below in your app's root folder once the package has been installed

cd ./ios && pod install

For Android, it's ready to go.

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 | string[], target: string): Promise<string>

zip source to target

NOTE: the string version of source is for folder, the string[] version is for file, so if you want to zip a single file, use zip([file]) instead of zip(file)

Example

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

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

zipWithPassword(source: string | string[], target: string, password: string, encryptionType: string): Promise<string>

zip source to target

NOTE: the string version of source is for folder, the string[] version is for file, so if you want to zip a single file, use zip([file]) instead of zip(file)

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.error(error)
})

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

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.error(error)
})

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

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.error(error)
})

unzipAssets(assetPath: string, target: string): Promise<string>

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 = './myFile.zip'
const targetPath = DocumentDirectoryPath

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

subscribe(callback: ({ progress: number, filePath: string }) => void): 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 }) => {
    // the filePath is always empty on iOS for zipping.
    console.log(`progress: ${progress}\nprocessed at: ${filePath}`)
  })
}

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

Example App

You can use this repo, https://github.com/plrthink/RNZATestApp, for testing and contribution. For more information please refer to its README.

Related Projects


"Buy Me A Coffee"

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
7.0.115,281latest
7.0.2-beta.13beta
7.0.1-dev.01dev
6.0.1-alpha.01alpha

Version History

VersionDownloads (Last 7 Days)Published
7.0.2-beta.13
7.0.115,281
7.0.1-dev.01
7.0.083
6.1.24,573
6.1.144
6.1.04,208
6.0.9670
6.0.9-beta.01
6.0.9-dev.11
6.0.9-dev.01
6.0.885
6.0.72
6.0.619
6.0.56
6.0.42
6.0.31,142
6.0.24
6.0.14
6.0.1-alpha.01
6.0.08
5.0.7-beta.31
5.0.7-beta.21
5.0.7-beta.12
5.0.7-beta.01
5.0.6992
5.0.517
5.0.42
5.0.33
5.0.3-beta.11
5.0.21,737
5.0.2-beta.11
5.0.12
5.1.0-beta.11
5.1.0-dev.01
5.0.08
4.1.582
4.1.5-beta.01
4.1.43
4.1.32
4.1.28
5.0.0-alpha.013
4.1.2-beta.01
4.1.15
4.1.04
4.0.32
4.0.22
4.0.13
4.0.06
3.0.27
3.0.115
3.0.03
2.2.624
2.2.52
2.2.42
2.2.32
2.2.22
2.2.13
2.2.02
2.1.02
2.0.02
1.1.11
1.1.02
1.0.02
0.1.03
0.0.111
0.0.101
0.0.92
0.0.82
0.0.74
0.0.62
0.0.52
0.0.42
0.0.32
0.0.22
0.0.12

Package Sidebar

Install

npm i react-native-zip-archive

Weekly Downloads

29,137

Version

7.0.1

License

MIT

Unpacked Size

50.2 kB

Total Files

16

Last publish

Collaborators

  • support-mockingbot
  • iny7
  • yumao
  • caofan
  • dr-js
  • xuziwei
  • ethantw
  • plrthink
  • thatbean
  • daubert
  • carlwang
  • xdudu
  • zhaoxiaoming