Merge remote-tracking branch 'origin/main'

This commit is contained in:
wanglinjie
2025-09-03 09:38:15 +08:00
8 changed files with 71 additions and 6 deletions

View File

@@ -185,9 +185,22 @@ class PicGoUploader(ImageUploader):
"""
try:
# 准备请求头
headers = {
"X-API-Key": self.api_key
}
headers = {}
# 构建请求URL
request_url = self.api_url
# 判断是否为默认PicGo URL如果是则使用header认证否则使用URL参数认证
if self.api_url == "https://www.picgo.net/api/1/upload":
headers["X-API-Key"] = self.api_key
else:
# 对于自定义URL将API key作为查询参数添加到URL中
from urllib.parse import urlparse, urlunparse, parse_qs, urlencode
parsed_url = urlparse(request_url)
query_params = parse_qs(parsed_url.query)
query_params["key"] = self.api_key
new_query = urlencode(query_params, doseq=True)
request_url = urlunparse(parsed_url._replace(query=new_query))
# 准备文件数据
files = {
@@ -196,7 +209,7 @@ class PicGoUploader(ImageUploader):
# 发送请求
response = requests.post(
self.api_url,
request_url,
headers=headers,
files=files
)
@@ -207,6 +220,34 @@ class PicGoUploader(ImageUploader):
# 解析响应
result = response.json()
# 处理自定义PicGo服务器的响应格式
if "success" in result and "result" in result:
# 自定义PicGo服务器格式: {"success": true, "result": ["url"]}
if result["success"]:
image_url = result["result"][0] if result["result"] and len(result["result"]) > 0 else ""
image_metadata = ImageMetadata(
width=0,
height=0,
filename=filename,
size=0,
url=image_url,
delete_url=None
)
return UploadResponse(
success=True,
code="success",
message="Upload success",
data=image_metadata
)
else:
raise UploadError(
message="Upload failed",
error_type=UploadErrorType.SERVER_ERROR,
status_code=400,
details=result
)
# 处理官方PicGo服务器的响应格式
# 验证上传是否成功
if result.get("status_code") != 200:
error_message = "Upload failed"
@@ -580,7 +621,7 @@ class ImageUploaderFactory:
credentials["secret_key"]
)
elif provider == "picgo":
api_url = credentials.get("api_url", "https://www.picgo.net/api/1/upload")
api_url = credentials.get("api_url") or "https://www.picgo.net/api/1/upload"
return PicGoUploader(credentials["api_key"], api_url)
elif provider == "cloudflare_imgbed":
return CloudFlareImgBedUploader(