添加项目目录结构
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
import os
|
||||
import time
|
||||
import base64
|
||||
import requests
|
||||
from pathlib import Path
|
||||
|
||||
class GitHubUploader:
|
||||
def __init__(self, repo, branch, token):
|
||||
self.repo = repo
|
||||
self.branch = branch
|
||||
self.headers = {
|
||||
"Authorization": f"token {token}",
|
||||
"Accept": "application/vnd.github.v3+json"
|
||||
}
|
||||
|
||||
def _validate_permissions(self):
|
||||
"""验证Token权限"""
|
||||
try:
|
||||
# 验证Token
|
||||
auth_check = requests.get(
|
||||
"https://api.github.com/user",
|
||||
headers=self.headers,
|
||||
timeout=5
|
||||
)
|
||||
|
||||
if auth_check.status_code != 200:
|
||||
print(f"❌ Token验证失败: {auth_check.json().get('message')}")
|
||||
return False
|
||||
|
||||
# 验证仓库访问权限
|
||||
repo_check = requests.get(
|
||||
f"https://api.github.com/repos/{self.repo}",
|
||||
headers=self.headers
|
||||
)
|
||||
|
||||
if repo_check.status_code != 200:
|
||||
print(f"❌ 仓库访问失败: {repo_check.json().get('message')}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ 权限验证失败: {str(e)}")
|
||||
return False
|
||||
|
||||
def upload(self, file_path):
|
||||
"""上传文件到GitHub"""
|
||||
if not self._validate_permissions():
|
||||
return None
|
||||
|
||||
try:
|
||||
# 读取文件内容
|
||||
with open(file_path, 'rb') as f:
|
||||
content = base64.b64encode(f.read()).decode('utf-8')
|
||||
|
||||
# 生成文件名
|
||||
filename = f"wanx_{int(time.time())}.jpg"
|
||||
|
||||
# 上传到GitHub
|
||||
response = requests.put(
|
||||
f"https://api.github.com/repos/{self.repo}/contents/images/{filename}",
|
||||
headers=self.headers,
|
||||
json={
|
||||
"message": "Auto-upload from ComfyUI",
|
||||
"content": content,
|
||||
"branch": self.branch
|
||||
},
|
||||
timeout=10
|
||||
)
|
||||
|
||||
# 处理响应
|
||||
if response.status_code == 201:
|
||||
# 返回原始 GitHub URL 而不是 CDN URL
|
||||
return f"https://raw.githubusercontent.com/{self.repo}/{self.branch}/images/{filename}"
|
||||
elif response.status_code == 403:
|
||||
error_msg = response.json().get('message', '')
|
||||
if 'resource is not accessible' in error_msg:
|
||||
print("""❌ 权限不足,请检查:
|
||||
1. Token是否具有repo权限
|
||||
2. 仓库是否设置为私有
|
||||
3. Token是否已过期""")
|
||||
return None
|
||||
|
||||
print(f"❌ 上传失败: {response.status_code} - {response.text}")
|
||||
return None
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ 上传失败: {str(e)}")
|
||||
import traceback
|
||||
print(f"🔍 详细错误:\n{traceback.format_exc()}")
|
||||
return None
|
||||
Reference in New Issue
Block a user