import JSZip from "jszip" /** 重新打包 ZIP 文件 ,向其中添加或删除文件 */ export async function rezip( zip: Blob | ArrayBuffer | Uint8Array, op: { /** 要添加的文件列表,如果有同名文件会覆盖 */ addFiles?: { name: string; input: File | Blob | Response }[] /** 要删除的文件名列表 */ deleteFiles?: string[] } ): Promise { // 加载现有的 ZIP 文件 const jszip = new JSZip() await jszip.loadAsync(zip) // 删除指定的文件 if (op.deleteFiles) { for (const fileName of op.deleteFiles) { jszip.remove(fileName) } } // 添加新文件 if (op.addFiles) { for (const file of op.addFiles) { if (file.input instanceof Blob) { // 如果是 File 对象,直接添加 jszip.file(file.name, file.input) } else { // 如果是 Response 对象,获取其 blob 内容 const blob = await file.input.blob() jszip.file(file.name, blob) } } } // 生成新的 ZIP blob const newZipBlob = await jszip.generateAsync({ type: "blob" }) return newZipBlob }