上传: 后缀正则 INCOMPRESSIBLE 判断跳过7z (apk/zip/媒体/字体等), 未知格式默认压缩

This commit is contained in:
lou
2026-08-10 20:13:15 +08:00
parent a1fcb81945
commit 8475dbf3ec
+9 -9
View File
@@ -10,6 +10,7 @@ vue-tui 的 raw mode 输入无法配合 IME, Python cooked-mode input() 可以)
import glob
import json
import os
import re
import shutil
import subprocess
import sys
@@ -17,11 +18,11 @@ 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",
}
# 压缩/不可压格式 (正则): 命中则跳过 7z 直传 (压不了的不浪费时间)
INCOMPRESSIBLE = re.compile(
r"\.(7z|apk|avi|bz2|flac|gif|gz|jpeg|jpg|m4a|mkv|mov|mp3|mp4|pdf|png|rar|tar|ttf|webm|webp|woff|woff2|xz|zip)$",
re.IGNORECASE,
)
CLIENT_DIR = os.environ.get("SZ_CLIENT_DIR", "/home/lou/文档/7z-encrypt")
PYTHON = f"{CLIENT_DIR}/.venv/bin/python"
@@ -109,9 +110,8 @@ def upload() -> None:
server = "http://" + server # 只输 IP:端口 自动补协议
chunk_size = _clean(input("卷大小 MB [10]: ")) or "10"
# 已压缩格式 (zip/apk/媒体等) 跳过 7z 直传, 可压缩文本才 7z (mx=9 压 1.8GB 会失败/无收益)
ext = os.path.splitext(path)[1].lower()
if ext in COMPRESSIBLE:
# 已压缩格式 (正则匹配后缀) 跳过 7z 直传; 其余 7z 压缩
if INCOMPRESSIBLE.search(path):
print("\n[1/3] 7z 压缩 (-mx=9) ...")
# 输出到临时目录 (Android 公共目录如 Download 写入受限, errno=1)
src7z = os.path.join(tempfile.gettempdir(), os.path.basename(path) + ".7z")
@@ -122,7 +122,7 @@ def upload() -> None:
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 直传")
print(f"[1/3] 已压缩格式, 跳过 7z 直传")
src7z = path
print("\n[2/3] 加密 + 分卷 + 元数据 ...")