【发布时间】:2018-02-22 00:43:45
【问题描述】:
概述:
我正在尝试让保存/加载功能作为我正在构建的网络应用程序的一部分工作,但在我下载文件后无法正确重新加载文件。
后端:
我在 python 中有一个列表,看起来像
[[bytes, bytes, int, list, list, str], [...], [...], etc].
这是我关心的数据。然后我用
腌制它with open(file_path, 'wb') as fp:
pickle.dump(save_this_arr, fp)
并使用 Flask 的 send_file 发送:
return send_file(file_path, as_attachment=True)
前端:
在前端,我正在创建一个blob,编码一个数据url,然后将其设置为隐藏<iframe>的src:
let blob = new Blob([response.data], { type: "application/octet-stream" });
let url = window.URL.createObjectURL(blob);
self.downloader.src = url
这很好用,并为我提供了一个可以重新上传的文件。
问题:
我被困在如何正确解码 URL 以便我可以 pickle.load 结果。下面的两个链接似乎是我需要的,但是当我将它应用到我的代码时,我得到了 UnicodeDecodeErrors。
当前尝试:
with open(file_path, "rb") as fid:
contents = fid.read()
data = urllib.parse.parse_qs(contents, encoding='utf-16')
with open(file_path, 'wb') as fid:
fid.write(text)
with open(file_path, 'rb') as fid:
myList = pickle.load(fid)
编辑:
最初的问题是关于解码 url,因为我误解了 window.URL.createObjectURL(blob) 在做什么。从this blog post,我意识到我们实际上是在创建对内存中 blob 的引用。所以我真正想做的是在 Python 中读取一个 Blob。
参考资料:
【问题讨论】:
标签: javascript python flask pickle