---
title: "loadAsync(data [, options])"
layout: default
section: api
---

__Description__ : Read an existing zip and merge the data in the current JSZip
object at the current folder level. This technique has some limitations, see
[here]({{site.baseurl}}/documentation/limitations.html).

__Arguments__

name               | type   | description
-------------------|--------|------------
data               | String/Array of bytes/ArrayBuffer/Uint8Array/Buffer/Blob/Promise | the zip file
options            | object | the options to load the zip file

Content of `options` :

name                          | type    | default | description
------------------------------|---------|---------|------------
options.base64                | boolean | false   | set to `true` if the data is base64 encoded, `false` for binary.
options.checkCRC32            | boolean | false   | set to `true` if the read data should be checked against its CRC32.
options.optimizedBinaryString | boolean | false   | set to `true` if (and only if) the input is a string and has already been prepared with a 0xFF mask.
options.createFolders         | boolean | false   | set to `true` to create folders in the file path automatically. Leaving it false will result in only virtual folders (i.e. folders that merely represent part of the file path) being created.
options.decodeFileName        | function | decode from UTF-8 | the function to decode the file name / comment.

You shouldn't update the data given to this method : it is kept as it so any
update will impact the stored data.

Zip features supported by this method :

* Compression (<code>DEFLATE</code> supported)
* zip with data descriptor
* ZIP64
* UTF8 in file name, UTF8 in file content

Zip features not (yet) supported :

* password protected zip
* multi-volume zip


__About `decodeFileName`__ :

A zip file has a flag to say if the filename and comment are encoded with UTF-8.
If it's not set, JSZip has **no way** to know the encoding used. It usually
is the default encoding of the operating system.

The function takes the bytes array (Uint8Array or Array) and returns the
decoded string.

__Returns__ : A [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) with the updated zip object.
The promise can fail if the loaded data is not valid zip data or if it
uses features (multi volume, password protected, etc).

<!--
__Complexity__ : for k the number of entries in the zip file and n the length
of the data :

The default use case is **O(k)**.
If the data is in base64, we must first decode it : **O(k + n)**.
If the data is a string not in base64 and optimizedBinaryString is false, we
must apply the 0xFF mask : **O(k + n)**.
If checkCRC32 is true, it **adds** to the above complexity **O(n)** and the
complexity of the decompression algorithm.
-->

__Example__

```js
var zip = new JSZip();
zip.loadAsync(zipDataFromXHR);
```

```js
require("fs").readFile("hello.zip", function (err, data) {
  if (err) throw err;
  var zip = new JSZip();
  zip.loadAsync(data);
}
```

Using sub folders :

```js
var zip = new JSZip();
zip.folder("subfolder").loadAsync(data);
// the content of data will be loaded in subfolder/
```

Using a custom charset :

```js
// using iconv-lite for example
var iconv = require('iconv-lite');

zip.loadAsync(content, {
    decodeFileName: function (bytes) {
        return iconv.decode(bytes, 'your-encoding');
    }
});
```

