TUI 上传: 已压缩格式(apk/zip/媒体)跳过7z直传; 7z失败带退出码

This commit is contained in:
lou
2026-08-10 20:06:38 +08:00
parent f1c1037228
commit a1fcb81945
+21 -9
View File
@@ -17,6 +17,12 @@ import tempfile
from pathlib import Path
from urllib import request as urlrequest
# 可压缩文本格式 (上传前 7z); 其余 (zip/apk/媒体) 已压缩, 跳过 7z 直传
COMPRESSIBLE = {
".txt", ".log", ".json", ".xml", ".csv", ".md", ".html", ".py", ".sh",
".sql", ".db", ".sqlite", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx",
}
CLIENT_DIR = os.environ.get("SZ_CLIENT_DIR", "/home/lou/文档/7z-encrypt")
PYTHON = f"{CLIENT_DIR}/.venv/bin/python"
# 编译产物优先 (Nuitka 原生二进制), 无则回退源码解释执行
@@ -103,15 +109,21 @@ def upload() -> None:
server = "http://" + server # 只输 IP:端口 自动补协议
chunk_size = _clean(input("卷大小 MB [10]: ")) or "10"
print("\n[1/3] 7z 压缩 (-mx=9) ...")
# 输出到临时目录 (Android 公共目录如 Download 写入受限, errno=1)
src7z = os.path.join(tempfile.gettempdir(), os.path.basename(path) + ".7z")
r = subprocess.run(["7z", "a", "-mx=9", "-bd", src7z, path])
if r.returncode != 0:
os.remove(src7z)
print("[错误] 7z 压缩失败")
return
print(f"[1/3] 压缩完成: {os.path.getsize(path) / 1048576:.1f} MB -> {os.path.getsize(src7z) / 1048576:.1f} MB")
# 已压缩格式 (zip/apk/媒体等) 跳过 7z 直传, 可压缩文本才 7z (mx=9 压 1.8GB 会失败/无收益)
ext = os.path.splitext(path)[1].lower()
if ext in COMPRESSIBLE:
print("\n[1/3] 7z 压缩 (-mx=9) ...")
# 输出到临时目录 (Android 公共目录如 Download 写入受限, errno=1)
src7z = os.path.join(tempfile.gettempdir(), os.path.basename(path) + ".7z")
r = subprocess.run(["7z", "a", "-mx=9", "-bd", src7z, path])
if r.returncode != 0:
os.remove(src7z)
print(f"[错误] 7z 压缩失败 (exit {r.returncode})")
return
print(f"[1/3] 压缩完成: {os.path.getsize(path) / 1048576:.1f} MB -> {os.path.getsize(src7z) / 1048576:.1f} MB")
else:
print(f"[1/3] 已压缩格式 ({ext}), 跳过 7z 直传")
src7z = path
print("\n[2/3] 加密 + 分卷 + 元数据 ...")
code = run([