0.1.1 • Published 1 year ago
zip-saver v0.1.1
install
npm install zip-saver
# or
yarn add zip-saver
# or
pnpm add zip-saverusage
import { createZip, createZipStream } from 'zip-saver'
// generate zip file directly
const handleFileChange = async (event: Event) => {
const files = (event.target as HTMLInputElement).files
if (!files) return
const fileList = Array.from(files)
const zipBlob = await createZip(fileList)
const a = document.createElement('a')
a.href = URL.createObjectURL(zipBlob)
a.download = 'example.zip'
a.click()
}
// genetate zip file by stream
const fetchTwoFileToZip = async () => {
const {
readableStream: zipStream,
createFile,
enqueue,
closeFile,
closeZip,
} = createZipStream()
const fileList = [
{ name: 'vite.svg', url: '/vite.svg' },
{ name: 'README.md', url: '/README.md' },
]
for (const { name, url } of fileList) {
const response = await fetch(url)
const respStream = response.body
if (!respStream) continue
createFile({
filename: name,
lastModified: new Date().getTime(),
})
const reader = respStream.getReader()
while (true) {
const { done, value } = await reader.read()
if (done) {
closeFile()
break
}
enqueue(value)
}
}
closeZip()
// zip stream to blob
const zipBlob = await new Response(zipStream).blob()
const a = document.createElement('a')
a.href = URL.createObjectURL(zipBlob)
a.download = 'example.zip'
a.click()
}apis
createZip(files: CreateZipOption[]): Promise<Blob>- param:
CreateZipOptionCreateZipOptioncan be one of the following:- one is just a
Fileobject, you can pass theFileobject directly - the other is an object with the following properties:
name:stringthe name of the filelastModified:numberthe last modified time of the fileblob:Blobthe blob of the file;
- one is just a
- return:
Promise<Blob>the zip file blob
- param:
createZipStream(): ZIPStreamController- return:
ZIPStreamControllerZIPStreamControlleris an object with the following properties:readableStream:ReadableStream<Uint8Array>the readable stream of the zip filecreateFile(file: CreateFileOption): voidwhen you want to add a file to the zip, you must call this function first- param:
CreateFileOptionCreateFileOptionis an object with the following properties:filename:stringthe name of the filelastModified:numberthe last modified time of the file
- param:
enqueue(chunk: Uint8Array): voidyou must call this function to add the chunk of the file- param:
Uint8Arraythe chunk of the file
- param:
closeFile(): voidwhen you finish adding the file, you must call this function, otherwise a error will be throwncloseZip(): voidwhen you finish adding all the files, call this function to close the zip file
- return:
TODOs
- encrypt compress
- compression algorithm