From ec92bf6b4ab305c4ab900c2d420e381f2ff311f6 Mon Sep 17 00:00:00 2001 From: Suzu008 Date: Mon, 13 Oct 2025 05:30:22 +0800 Subject: [PATCH] =?UTF-8?q?refactor(api):=20=E6=94=B9=E8=BF=9B=E5=8A=A0?= =?UTF-8?q?=E5=AF=86=E6=96=87=E4=BB=B6=E5=90=8D=E7=94=9F=E6=88=90=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 使用更安全的随机字符串生成方法,并保留原始文件名特征 确保生成的文件名唯一且避免冲突 --- src/cryptio/api.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/cryptio/api.py b/src/cryptio/api.py index cb7a420..751e22a 100644 --- a/src/cryptio/api.py +++ b/src/cryptio/api.py @@ -1,5 +1,6 @@ import os -import uuid +import string +import secrets import json import base64 from aiohttp import web @@ -111,12 +112,29 @@ async def upload_encrypted_image(request): if not encrypted_data: return web.json_response({"error": "No image data received"}, status=400) - # 生成唯一的加密文件名 - file_ext = os.path.splitext(original_filename)[1] if original_filename else ".enc" - unique_filename = f"cryptio_{uuid.uuid4().hex}{file_ext}.encrypted" + # 生成唯一的加密文件名,保留原始文件名并追加随机字符串 + input_dir = folder_paths.get_input_directory() + + safe_original = os.path.basename(original_filename) if original_filename else "cryptio" + if safe_original.lower().endswith(".encrypted"): + safe_original = safe_original[:-len(".encrypted")] + + base_name, file_ext = os.path.splitext(safe_original) + + base_name = base_name.strip().replace(" ", "_") or "cryptio" + file_ext = file_ext or ".enc" + + charset = string.ascii_lowercase + string.digits + + def build_filename() -> str: + random_suffix = ''.join(secrets.choice(charset) for _ in range(6)) + return f"{base_name}_{random_suffix}{file_ext}.encrypted" + + unique_filename = build_filename() + while os.path.exists(os.path.join(input_dir, unique_filename)): + unique_filename = build_filename() # 保存到 input 目录 - input_dir = folder_paths.get_input_directory() file_path = os.path.join(input_dir, unique_filename) # 写入加密数据