feat(config): 添加代理配置选项 添加USE_PROXY和PROXY_URL配置项以支持请求代理功能 feat(utils): 新增代理URL获取工具函数 引入get_proxied_url工具函数用于处理代理请求 refactor(services): 将所有外部API请求通过代理转发 修改file_service、generation_service和task_service中的requests.get/post调用, 统一使用get_proxied_url包装URL以支持代理访问外部API服务 ```
36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
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=60)
|
|
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
|