simplezip.js
Version:
Lightweight uncompressed browser-compatible ZIP generation
108 lines (88 loc) • 3.37 kB
Markdown
# SimpleZIP.js
A light-weight library for building uncompressed ZIP files, in NodeJS or in the Browser.
# Getting Started
## With NPM / NodeJS
```bash
npm install --save simplezip.js
```
And then
```js
const SimpleZip = require("simplezip.js");
const fs = require("fs");
let files = [{
name: "FirstFile.txt",
data: "The contents"
}, {
name: "SecondFile.txt",
data: Buffer.from("Also, the contents",'utf8')
}];
// This returns an ArrayBuffer
let data = SimpleZip.GenerateZipFrom(files);
fs.writeFileSync("output.zip", new Buffer(data), {encoding: 'binary'});
```
## With HTML / Javascript
It's easy! Add [simplezip.min.js](https://raw.githubusercontent.com/Jamezo97/simplezip.js/master/build/simplezip.min.js) to your project, then add
```html
<script type="text/javascript" src="?...../simplezip.min.js"></script>
```
to your headers, and then:
```js
var files = [{
name: "FirstFile.txt",
data: "The contents"
}, {
name: "SecondFile.txt",
data: new Uint8Array([65, 66, 67, 68])
}];
var data = SimpleZip.GenerateZipFrom(files);
// Can then convert to a blob and download the file
var blob = new Blob([data], {type: "octet/stream"});
var url = window.URL.createObjectURL(blob);
// Append to document, or whatever you want to do
var el = document.createElement("a");
el.href = url;
el.target = '_blank';
el.download = "output.zip";
el.innerHTML = "Download!"
document.getElementsByTagName("body")[0].appendChild(el);
```
# API
- [SimpleZip.<b>GenerateZipFrom()</b>](#generatezipfrom)
- [new <b>SimpleZip()</b>](#constructor)
- [SimpleZip#<b>appendFiles()</b>](#appendfiles)
- [SimpleZip#<b>appendFile()</b>](#appendfile)
- [SimpleZip#<b>generate()</b>](#generate)
- [SimpleZip#<b>ensureRemainingSpace()</b>](#ensureremainingspace)
Note that all 'files' passed to the SimpleZip API should be of the form
```ts
{
name:string,
data:ArrayBuffer|Uint8Array|string
}
```
<a name="generatezipfrom"></a>
### SimpleZip.GenerateZipFrom([files])
A static method to create the entire ZIP file all at once. This allocates the exact amount of space required, and fills it with the files specified.
<a name="constructor"></a>
### new SimpleZip(expectedSize)
Creates a new SimpleZip object, and allocates `expectedSize` bytes for the entire ZIP file. If this isn't enough, it will re-allocate later when adding new files.
<a name="appendfiles"></a>
### SimpleZip#appendFiles([files])
Appends the specified files to the ZIP file. Will re-allocate space to fit them all if required.
<a name="appendfile"></a>
### SimpleZip#appendFile(file)
Just a helper function. Calls [appendFiles](#appendfiles) with the file wrapped in an array.
<a name="generate"></a>
### SimpleZip#generate()
Appends the final ZIP records, and returns the ZIP file in an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer).
Will re-allocate space to fit the extra records if required.
<a name="ensureremainingspace"></a>
### SimpleZip#ensureRemainingSpace(remaining)
Expands the capacity of the underlying ArrayBuffer to ensure at least `remaining` bytes are free to be filled. This also includes ZIP entry records and headers etc. So if you're resizing it to fit a file with a certain size, then add about 100 bytes more per file for the file names and ZIP entries etc.