import os import uuid import time import requests from urllib.parse import quote from werkzeug.utils import secure_filename from config import Config from extensions import s3_client from utils import get_proxied_url def handle_file_uploads(files): """处理文件上传到 MinIO""" img_urls = [] for f in files: ext = os.path.splitext(f.filename)[1] filename = f"{uuid.uuid4().hex}{ext}" s3_client.upload_fileobj( f, Config.MINIO["bucket"], filename, ExtraArgs={"ContentType": f.content_type} ) img_urls.append(f"{Config.MINIO['public_url']}{quote(filename)}") return img_urls def get_remote_file_stream(url): """获取远程文件的流""" req = requests.get(get_proxied_url(url), stream=True, timeout=Config.PROXY_TIMEOUT_DEFAULT) req.raise_for_status() headers = {} if req.headers.get('Content-Type'): headers['Content-Type'] = req.headers['Content-Type'] else: headers['Content-Type'] = 'application/octet-stream' return req, headers