Skip to content

Commit 092e85d

Browse files
committed
fix: handle multiple entries in zip file extraction to prevent data loss
--bug=1071129@tapd-62980211 --user=刘瑞斌 【github#6238】从旧版本(2.3.1)升级到最新版(2.10.1-lts),下载知识库的word文档,文件损坏 https://www.tapd.cn/62980211/s/1962254
1 parent 1f5ef18 commit 092e85d

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

apps/knowledge/models/knowledge.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -435,15 +435,19 @@ def get_bytes(self):
435435
buffer = io.BytesIO()
436436
for chunk in self.get_bytes_stream():
437437
buffer.write(chunk)
438+
data = buffer.getvalue()
438439
try:
439440
# 解压数据
440441
with zipfile.ZipFile(buffer) as zip_file:
442+
names = [name for name in zip_file.namelist() if not name.endswith("/")]
443+
if len(names) != 1:
444+
return data
441445
# 用 zip 内实际存储的条目名,避免文件名不匹配
442-
name = zip_file.namelist()[0]
446+
name = names[0]
443447
return zip_file.read(name)
444-
except Exception as e:
448+
except zipfile.BadZipFile:
445449
# 如果数据不是zip格式,直接返回原始数据
446-
return buffer.getvalue()
450+
return data
447451

448452
def get_bytes_stream(self, start=0, end=None, chunk_size=64 * 1024):
449453
def _read_with_offset():

0 commit comments

Comments
 (0)