Pyscript生成二进制文件下载异常求助:下载内容为对象描述文本
PyScript生成二进制文件下载异常问题
我需要下载PyScript脚本生成的二进制文件,点击“Download”按钮本应触发下载包含脚本生成二进制数据的文件,但实际得到的是纯文本.txt文件,内容仅一行:
<gzip _io.BufferedWriter name='file_test.dat' 0xdce348>
以下是我创建“Download”按钮的代码(代码位于异步Python函数中,点击“启动程序”按钮后调用):
f_in = open('datafile','rb') # 文件已打开,存储在/home/pyodide/路径下 # 将文件内容写入gzip.GzipFile f = open('file_test.dat','wb') gz = gzip.GzipFile('', 'wb', 8, f, 0.) for ln in f_in: gz.write(ln) print(ln) # 逐行打印文件内容显示数据正确,所以我确信脚本本身生成数据的逻辑没问题 # 创建Blob对象并附加到新的<a>标签 blob = Blob.new([gz], {type: "application/gzip"}) downloadDoc = document.createElement('a') downloadDoc.href = window.URL.createObjectURL(blob) # 将<a>标签添加到主HTML文件内的<div>中,并创建下载按钮 downloadButton = document.createElement('button') downloadButton.innerHTML = "Download" downloadDoc.appendChild(downloadButton) document.getElementById("download-div").appendChild(downloadDoc)
我刚接触Web开发(这是我的第一个Web项目),可能忽略了一些基础要点。
解决方案
关闭所有文件,并在创建Blob前将file_test.dat文件传入pyodide.to_js()函数即可解决问题。完整可用代码如下:
f_in = open('datafile','rb') f = open('file_test.dat','wb') gz = gzip.GzipFile('', 'wb', 8, f, 0.) for ln in f_in: gz.write(ln) # 关闭所有文件 gz.close() f_in.close() f.close() # 重新打开文件并传入pyodide.to_js()函数解决问题 f2 = open('file_test.dat',"rb") content = to_js(f2.read()) blob = Blob.new([content], {type: ""}) downloadDoc = document.createElement('a') downloadDoc.href = window.URL.createObjectURL(blob) downloadButton = document.createElement('button') downloadButton.innerHTML = "Download" downloadDoc.appendChild(downloadButton) document.getElementById("download-div").appendChild(downloadDoc)
内容的提问来源于stack exchange,提问作者Juno
相关产品推荐
相关产品推荐

