import SevenZip from "./7z-wasm/7zz.es6.js"; let sevenZipInstance; self.onmessage = async (e) => { const { filename, arrayBuffer } = e.data; try { if (!sevenZipInstance) { sevenZipInstance = await SevenZip(); } // 写入 WASM FS const data = new Uint8Array(arrayBuffer); const stream = sevenZipInstance.FS.open(filename, "w+"); sevenZipInstance.FS.write(stream, data, 0, data.length); sevenZipInstance.FS.close(stream); // 调用 7z 解压命令 // 解压到当前 FS 根目录 sevenZipInstance.callMain(["x", filename]); // 获取解压后的文件列表 const files = sevenZipInstance.FS.readdir("/").filter(f => f.indexOf('.bin')!=-1); const buffers = files.map(f => ({ name: f, data: sevenZipInstance.FS.readFile(f) })); // 清理 FS,防止堆积 sevenZipInstance.FS.unlink(filename); for (const f of files) sevenZipInstance.FS.unlink(f); self.postMessage({ type: "done", result: buffers }); } catch (err) { console.error(`[Worker] 解压失败 ${filename}:`, err); self.postMessage({ type: "done", result: null }); } };