JavaScripting

The definitive source of the best
JavaScript libraries, frameworks, and plugins.


  • ×

    JavaScript library to zip and unzip files
    Filed under 

    • 🔾65%Overall
    • 2,665
    • 5 hours
    • 🕩486
    • 👥3

    zip.js is an open-source library (BSD-3-Clause license) to zip and unzip files supporting multi-core compression, compression streams, Zip64 and encryption.

    See here for more info: https://gildas-lormeau.github.io/zip.js/

    // ----
    // Hello world with zip.js (and Streams)
    // ----
    
    import {
      BlobReader,
      ZipReader,
      ZipWriter,
    } from "https://deno.land/x/zipjs/index.js";
    
    // ----
    // Write the zip file
    // ----
    
    // Creates a TransformStream object where the zip content will be written in
    // the `writable` property.
    const zipFileWriter = new TransformStream();
    // Creates a Promise object resolved to the zip content returned as a Blob
    // object via the `readable` property of `zipFileWriter`.
    const zipFileBlobPromise = new Response(zipFileWriter.readable).blob();
    // Creates a Reader object containing a `readable` property. This property is
    // set to a ReadableStream object storing the text of the entry to add in the
    // zip (i.e. "Hello world!").
    const helloWorldReader = { readable: new Blob(["Hello world!"]).stream() };
    
    // Creates a ZipWriter object writing data via `zipFileWriter`, adds the entry
    // "hello.txt" containing the text "Hello world!" via `helloWorldReader` in the
    // zip, and closes the writer.
    const zipWriter = new ZipWriter(zipFileWriter);
    await zipWriter.add("hello.txt", helloWorldReader);
    await zipWriter.close();
    
    // Retrieves the Blob object containing the zip content into `zipFileBlob`.
    const zipFileBlob = await zipFileBlobPromise;
    
    // Uncomment the following code to download the zip file (in a browser)
    //
    // const anchorElement = document.createElement("a");
    // anchorElement.href = URL.createObjectURL(zipFileBlob);
    // anchorElement.download = "hello.zip";
    // anchorElement.click();
    //
    
    // ----
    // Read the zip file
    // ----
    
    // Creates a BlobReader object used to read `zipFileBlob`.
    const zipFileReader = new BlobReader(zipFileBlob);
    // Creates a TransformStream object where the content of the first entry in the
    // zip will be written in the `writable` property.
    const helloWorldWriter = new TransformStream();
    // Creates a Promise object resolved to the content of the first entry returned
    // as text via the `readable` property of `helloWorldWriter`.
    const helloWorldTextPromise = new Response(helloWorldWriter.readable).text();
    
    // Creates a ZipReader object reading the zip content via `zipFileReader`,
    // retrieves metadata (name, dates, etc.) of the first entry, retrieves its
    // content via `helloWorldWriter`, and closes the reader.
    const zipReader = new ZipReader(zipFileReader);
    const firstEntry = (await zipReader.getEntries()).shift();
    await firstEntry.getData(helloWorldWriter);
    await zipReader.close();
    
    // Displays "Hello world!".
    const helloWorldText = await helloWorldTextPromise;
    console.log(helloWorldText);
    

    See here for more examples: https://github.com/gildas-lormeau/zip.js/tree/master/tests/all

    Show All