FLUX.1-Krea-dev / remote_uploader.py
dangthr's picture
Update remote_uploader.py
15bd9da verified
raw
history blame
4.34 kB
import requests
import argparse
import os
import time
class FileUploader:
def __init__(self, server_url, api_key, space_id):
self.server_url = server_url
self.api_key = api_key
self.space_id = space_id
def upload_file(self, file_path):
"""上传单个文件"""
if not os.path.exists(file_path):
print(f"文件不存在: {file_path}")
return False
filename = os.path.basename(file_path)
print(f"正在上传文件: {filename}")
# 构建完整的 API 端点 URL
upload_url = f"{self.server_url.rstrip('/')}/api/remote_upload"
# 准备请求头和数据
headers = {
'X-API-Key': self.api_key
}
data = {
'space_id': self.space_id
}
# 读取文件内容并上传
try:
with open(file_path, 'rb') as f:
files = {
'file': (filename, f)
}
# 发送 POST 请求
response = requests.post(upload_url, headers=headers, data=data, files=files)
# 打印服务器响应
print(f"服务器响应 ({response.status_code}):")
try:
result = response.json()
print(result)
if response.status_code == 200:
print(f"✅ 文件 '{filename}' 上传成功!")
return True
else:
print(f"❌ 上传失败: {result.get('error', '未知错误')}")
return False
except requests.exceptions.JSONDecodeError:
print(response.text)
return False
except IOError as e:
print(f"读取文件时出错: {e}")
return False
except requests.exceptions.RequestException as e:
print(f"请求时出错: {e}")
return False
def upload_directory_once(watch_dir, server_url, api_key, space_id):
"""一次性扫描并上传目录中的所有文件"""
if not os.path.exists(watch_dir):
print(f"目录不存在: {watch_dir}")
return
print(f"🔍 开始扫描目录: {watch_dir}")
print(f"📡 服务器地址: {server_url}")
print(f"🔑 Space ID: {space_id}")
print("-" * 50)
uploader = FileUploader(server_url, api_key, space_id)
# 获取所有文件
all_files = []
for root, dirs, files in os.walk(watch_dir):
for file in files:
file_path = os.path.join(root, file)
if os.path.isfile(file_path):
all_files.append(file_path)
if not all_files:
print("📁 目录中没有找到任何文件")
return
print(f"📁 找到 {len(all_files)} 个文件,开始上传...")
success_count = 0
failed_count = 0
for file_path in all_files:
try:
if uploader.upload_file(file_path):
success_count += 1
else:
failed_count += 1
# 稍微延迟一下,避免服务器压力过大
time.sleep(0.5)
except Exception as e:
print(f"上传文件 {file_path} 时发生异常: {e}")
failed_count += 1
print("-" * 50)
print(f"📊 上传完成! 成功: {success_count}, 失败: {failed_count}")
if success_count > 0:
print("🎉 文件已成功上传到您的网盘!")
return success_count, failed_count
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="一次性文件上传器 - 扫描并上传指定文件夹中的所有文件")
parser.add_argument("api_key", help="您的 API 密钥")
parser.add_argument("space_id", help="Space ID")
parser.add_argument("--server", default="http://127.0.0.1:5001", help="服务器的 URL 地址 (默认: http://127.0.0.1:5001)")
parser.add_argument("--upload-dir", default="output", help="要上传的目录 (默认: output)")
args = parser.parse_args()
# 开始一次性上传
upload_directory_once(args.upload_dir, args.server, args.api_key, args.space_id)