TUI 上传: 已压缩格式(apk/zip/媒体)跳过7z直传; 7z失败带退出码
This commit is contained in:
+21
-9
@@ -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([
|
||||
|
||||
Reference in New Issue
Block a user