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

在MongoDB中存储Zip文件的Python编码问题求助

问题与解决方案

问题背景

我知道MongoDB作为文档数据库无法直接存储文件,因此尝试通过Python将Zip文件夹转换为字节,后续从数据库取回时再还原为Zip格式。为测试流程,先用TXT文件模拟数据库存储字节数据,但遇到编码问题:跳过TXT文件转换步骤时可成功还原Zip,经过TXT中转后会报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xab in position 11: invalid start byte,尝试多种编码均无效。

测试代码如下:

# 测试用的Zip文件路径
zipLink = "/Users/XXX/Desktop/XXX.zip"
# 要创建的测试TXT文件路径
testTxt = "/Users/XXX/Desktop/test.txt"

# 以二进制模式读取Zip文件
with open(zipLink, 'rb') as file_data:
    bytes_content = file_data.read() 

# 将字节写入TXT文件作为字符串,模拟上传到数据库
with open(testTxt, 'w') as file_data:
    file_data.write(str(bytes_content,'utf-8'))

# 从TXT文件读取字符串形式的字节,模拟从数据库取回
with open(testTxt, 'r') as file_data:
    stringData = file_data.read()

# 用从TXT读取的字节创建新Zip文件
with open("/Users/XXX/Desktop/Remade.zip", 'wb') as file_data:
    file_data.write(bytes(stringData,'utf-8'))

错误原因

Zip文件的二进制数据属于非文本字节流,包含大量不符合UTF-8(或任何文本编码)规则的字节。直接将二进制字节转成UTF-8字符串时,这些非法字节会被错误处理(要么抛出解码错误,要么被替换成占位符),导致原始数据损坏;后续再把字符串转回字节时,已经不是原来的Zip二进制数据,自然无法还原成有效的Zip文件。

解决方法

使用Base64编码将二进制数据转换成纯文本字符串。Base64会把任意二进制数据编码成由A-Z、a-z、0-9、+、/组成的纯文本,完全兼容文本存储,不会丢失或损坏数据。取回时再用Base64解码回二进制数据即可。

修正后的代码:

import base64

# 测试用的Zip文件路径
zipLink = "/Users/XXX/Desktop/XXX.zip"
# 要创建的测试TXT文件路径
testTxt = "/Users/XXX/Desktop/test.txt"

# 以二进制模式读取Zip文件
with open(zipLink, 'rb') as file_data:
    bytes_content = file_data.read() 

# 用Base64把二进制数据编码成文本字符串,模拟上传到数据库
base64_str = base64.b64encode(bytes_content).decode('utf-8')
with open(testTxt, 'w', encoding='utf-8') as file_data:
    file_data.write(base64_str)

# 从TXT文件读取Base64字符串,模拟从数据库取回数据
with open(testTxt, 'r', encoding='utf-8') as file_data:
    base64_str_read = file_data.read()

# 解码Base64字符串回二进制数据,还原Zip文件
restored_bytes = base64.b64decode(base64_str_read)
with open("/Users/XXX/Desktop/Remade.zip", 'wb') as file_data:
    file_data.write(restored_bytes)

补充说明

如果实际使用MongoDB存储,无需TXT中转,直接将Base64编码后的字符串存入MongoDB的字符串字段即可;取回时取出字符串,用Base64解码后写入文件就能还原Zip。

内容的提问来源于stack exchange,提问作者Jumana Al-Saeed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 19:38:35