Pyodide文件系统Zip文件下载功能实现失败求助
Pyodide 下载Zip文件失败的修复方案
问题出在你用utf8编码读取二进制Zip文件——Zip是二进制格式,用文本编码读取会破坏原始数据结构,导致FileSaver无法识别有效文件。
修复步骤:
- 读取文件时不要指定
utf8编码,Pyodide的FS.readFile默认会返回Uint8Array类型的二进制数据 - 将
Uint8Array转换为Blob对象,并指定正确的MIME类型application/zip - 再用FileSaver的
saveAs保存Blob
修正后的代码:
// 读取二进制Zip文件,返回Uint8Array const fileData = pyodide.FS.readFile('/home/pyodide/assets/test.zip'); // 转换为符合要求的Blob对象 const zipBlob = new Blob([fileData], { type: 'application/zip' }); // 触发下载 saveAs(zipBlob, 'test.zip');
可选优化:读取前可以先检查文件是否存在,避免报错:
if (pyodide.FS.exists('/home/pyodide/assets/test.zip')) { // 执行上述下载逻辑 } else { console.error('指定的Zip文件不存在'); }
内容的提问来源于stack exchange,提问作者Peter Estiven
相关产品推荐
相关产品推荐

