如何使用 JSZip 获取压缩文件的大小

在 JSZip 中,你可以通过首先使用 zip.file(...).async(...) 将 ZIP 存档中压缩的文件解压缩为 ArrayBuffer,然后使用 .byteLength 获取缓冲区大小来获取文件大小。

get_compressed_file_size.js
zip.file("filename.txt").async("ArrayBuffer").then(function(data) {
    var fileSize = data.byteLength;
    // TODO 你的代码放在这里
})

完整示例

这基于我们关于如何使用 HTML5 和 JSZip 解压 ZIP 存档中的文件的文章,该文章使用 HTML5 文件输入读取本地文件。此示例打印 ZIP 存档中每个文件的文件大小:

get_compressed_file_size_example.html
<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>

示例输出

output.txt
word/document.xml is 88369 bytes long

Check out similar posts by category: Javascript