Python后端读取二进制文件,base64对其进行编码,将其插入JSON文档并将其发送到JavaScript前端:
#Python
with open('some_binary_file', 'rb') as in_file:
return base64.b64encode(in_file.read()).decode('utf-8')
JavaScript前端从JSON文档中获取base64编码的字符串并将其转换为二进制blob:
#JavaScript
b64_string = response['b64_string'];
decoded_file = atob(b64_string);
blob = new Blob([decoded_file], {type: 'application/octet-stream'});
不幸的是,在下载blob时,编码似乎是错误的,但我不确定问题出在哪里。例如。这是一个我无法打开的Excel文件。在Python部分我尝试了不同的解码器('ascii','latin1'),但这没有什么区别。我的代码有问题吗?
答案 0 :(得分:0)
我找到了答案here。问题出在JavaScript方面。似乎只将atob
应用于base64编码的字符串并不适用于二进制数据。您必须将其转换为类型化字节数组。我最终做了什么(LiveScript):
byte_chars = atob base64_str
byte_numbers = [byte_chars.charCodeAt(index) for bc, index in byte_chars]
byte_array = new Uint8Array byte_numbers
blob = new Blob [byte_array], {type: 'application/octet-stream'}