In JSZip, you can get the file size of a file compressed inside a ZIP archive by first decompressing it using zip.file(...).async(...)
into an ArrayBuffer
and then using .byteLength
to get the size of the buffer.
zip.file("filename.txt").async("ArrayBuffer").then(function(data) { var fileSize = data.byteLength; // TODO Your code goes here })
Full example
This is based on our post on How to uncompress file inside ZIP archive using HTML5 & JSZip which reads a local file using a HTML5 file input. This example prints the file size of every file inside the ZIP archive:
<html> <body> <input type="file" id="myfile" onchange="onMyfileChange(this)" /> <script src="https://unpkg.com/[email protected]/dist/jszip.js" type="text/javascript"></script> <script type="text/javascript"> function onMyfileChange(fileInput) { if(fileInput.files[0] == undefined) { return ; } var filename = fileInput.files[0].name; var reader = new FileReader(); reader.onload = function(ev) { JSZip.loadAsync(ev.target.result).then(function(zip) { zip.file("word/document.xml").async("ArrayBuffer").then(function(data) { console.log("word/document.xml is", data.byteLength, "bytes long"); }) }).catch(function(err) { console.error("Failed to open", filename, " as ZIP file:", err); }) }; reader.onerror = function(err) { console.error("Failed to read file", err); } reader.readAsArrayBuffer(fileInput.files[0]); } </script> </body> </html>
Example output
word/document.xml is 88369 bytes long