Zipreader ZIP 目录读取工具
GB.Zipreader 是一个零依赖的浏览器端 ZIP 目录读取工具。它通过 FileReader 解析本地 ZIP 文件的文件头,返回文件名、压缩方式和大小等元数据,不会解压或读取文件正文。
安装与引入
浏览器直接引入
<script src="https://cloud.m775.net/js/zipreader.js"></script>
npm 项目
npm i @gentbo/zipreader
import '@gentbo/zipreader';
快速开始
将文件输入框的选择器传给 get(),通过 success() 异步接收 ZIP 条目列表。
<input id="zipFile" type="file" accept=".zip,application/zip">
<script>
GB.Zipreader()
.success(files => {
console.table(files);
})
.error(error => {
console.error('ZIP 读取失败:', error);
})
.get('#zipFile');
</script>
读取 File 对象
除了文件输入框选择器,get() 也可以直接接收浏览器的 File 对象,适合拖放上传等场景。
dropArea.addEventListener('drop', event => {
event.preventDefault();
GB.Zipreader()
.simple()
.success(names => console.log(names))
.error(error => console.error(error))
.get(event.dataTransfer.files[0]);
});
输出格式
默认返回对象数组,并过滤以 / 结尾的目录条目。
[
{
name: 'images/photo.jpg',
method: 'Deflate',
size: 18420,
unsize: 35680,
utf8: true
}
]
nameZIP 内的完整文件路径。method压缩方式名称,包括 Stored、Deflate、BZIP2、LZMA、PPMd 或 OTHER。size压缩后的字节数。unsize原始文件的字节数。utf8ZIP 文件头是否声明文件名使用 UTF-8。简单列表与目录
.simple()本次读取只返回文件路径字符串数组;读取完成或失败后自动恢复默认详细模式。.directory()保留目录条目;不调用时默认只返回文件。GB.Zipreader()
.simple()
.directory()
.success(entries => {
// ['images/', 'images/photo.jpg', 'readme.txt']
console.log(entries);
})
.get('#zipFile');
API 速查
GB.Zipreader()创建独立读取器。.success(callback)设置解析成功回调,参数为条目数组。.error(callback)设置 FileReader、解析或文件名解码错误回调。.simple()将下一次结果切换为文件路径数组。.directory()在结果中包含目录条目。.get(selectorOrFile, index = 0)异步读取文件并立即返回当前实例;index 用于选择文件输入框中的第几个文件。使用边界
只读目录只解析本地文件头元数据,不校验 CRC,也不解压文件内容。ZIP 特性依赖标准本地文件头;使用数据描述符、ZIP64、加密或特殊扩展的压缩包可能无法完整读取。调用时机选择器必须指向已经存在的 file 输入框,并且用户已经选择文件。异步结果get() 不返回 Promise;后续业务必须放在 success() 或 error() 回调中。