You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:20:30