Fix ZIP password encryption functionality by using 7zip

This commit is contained in:
yhydev
2025-12-13 10:56:18 +08:00
parent 554638babb
commit 4ed2dd484d

View File

@@ -240,20 +240,31 @@ def upload_working_files(password=None):
# 如果提供了密码创建加密ZIP文件 # 如果提供了密码创建加密ZIP文件
if password: if password:
# 直接创建加密ZIP文件替换原有的非加密文件 # 删除原有的非加密文件
os.unlink(zip_path) os.unlink(zip_path)
# 获取WORKING_DIR # 获取WORKING_DIR
working_dir = get_working_dir() working_dir = get_working_dir()
# 使用内置的zipfile模块创建加密ZIP # 尝试使用7zip创建加密ZIP文件
with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as zipf: try:
import subprocess
# 构建7zip命令 - 注意7zip参数之间没有空格
cmd = ['7z', 'a', '-tzip', '-p' + password, '-mx9', zip_path]
# 添加所有文件到命令中
for file_path in working_files: for file_path in working_files:
# 计算相对路径,保持目录结构 # 计算相对路径,保持目录结构
arcname = os.path.relpath(file_path, working_dir) arcname = os.path.relpath(file_path, working_dir)
zipf.write(file_path, arcname) # 7zip需要相对路径从working_dir开始
# 设置密码用于解密 cmd.append(os.path.relpath(file_path, working_dir))
zipf.setpassword(password.encode())
# 切换到working_dir执行命令确保相对路径正确
subprocess.run(cmd, check=True, capture_output=True, cwd=working_dir)
except (subprocess.CalledProcessError, FileNotFoundError):
# 如果7zip不可用抛出错误
raise Exception("Failed to create encrypted ZIP file: 7zip is not available or failed to execute")
# 上传到tmpfile # 上传到tmpfile
download_url = upload_to_tmpfile(zip_path) download_url = upload_to_tmpfile(zip_path)