|
本帖最后由 fly 于 2024-9-13 11:39 编辑
import requests
import os
import urllib.parse
import tkinter as tk
import json
# Alist 路径,填写你自己的域名或IP地址
BASE_URL = 'https://alist.xxx.xxx' # 有域名就填域名
# BASE_URL = 'http://127.0.0.1:5244' # 没有域名就填IP地址
# 登录函数,获取用户的 token
# 参数: 用户名, 密码
# 返回: 登录成功后的 token
def login(username, password):
url = f'{BASE_URL}/api/auth/login'
data = {'Username': username, 'Password': password}
response = requests.post(url, data=data)
response_data = response.json()
return response_data['data']['token']
# 获取本地文件夹中的最后一个文件
# 参数: 文件夹路径
# 返回: 文件夹中的最后一个文件名,若文件夹为空返回 None
def get_last_file(directory):
files = os.listdir(directory)
if files:
return files[-1] # 返回文件夹中的最后一个文件
return None
# 显示提示信息的弹窗
# 参数: 提示内容, 弹窗标题 (默认值为 "提示")
def show_message(message, title="提示"):
root = tk.Tk()
root.title(title) # 设置弹窗标题
label = tk.Label(root, text=message, font=("Helvetica", 16))
label.pack(expand=True, fill='both') # 调整标签大小
root.geometry("400x400") # 设置窗口大小为 400x400
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
# 设置窗口在屏幕中央显示
root.geometry(f"+{screen_width // 2 - 200}+{screen_height // 2 - 200}")
# 3秒后自动关闭弹窗
root.after(3000, root.destroy)
root.mainloop() # 启动事件循环
# 上传文件到云端的函数
# 参数: token, 本地文件路径, 云端文件路径
# 返回: 上传的响应结果 (字典格式)
def upload_file(token, local_file_path, remote_file_path):
url = f'{BASE_URL}/api/fs/put'
# 对云端文件路径进行 URL 编码,防止特殊字符导致请求失败
encoded_remote_path = urllib.parse.quote(remote_file_path)
# 请求头信息,包括 token 认证和上传文件路径等
headers = {
'Authorization': token, # 使用登录获取的 token 进行认证
'File-Path': encoded_remote_path, # 文件存储路径
'As-Task': 'true', # 标记为任务,异步处理
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
'Content-Type': 'application/octet-stream' # 文件类型为二进制流
}
# 以二进制模式读取文件内容,并发起 PUT 请求上传
with open(local_file_path, 'rb') as file:
response = requests.put(url, headers=headers, data=file)
return response.json()
# 主程序入口,控制整个上传流程
def main():
# Alist 登录的用户名和密码
username = 'admin' #用户名和密码,修改为你自己的用户名和密码
password = 'xxx'
# 本地和云端文件夹路径
local_directory = r'D:\backup\zTasker\浏览器备份\谷歌浏览器' #本地电脑文件夹路径,修改为你自己的
remote_directory = '/Onedrive/AdeleV/浏览器备份/' #alist上你要存放备份的路径,修改为你自己的
# 登录并获取 token
token = login(username, password)
print('Token:', token) # 打印 token 以供调试使用
# 获取本地文件夹中的最后一个文件
last_file = get_last_file(local_directory)
if not last_file: # 如果文件夹为空,直接返回
print("文件夹为空")
return
# 拼接本地文件路径和云端文件路径
local_file_path = os.path.join(local_directory, last_file)
remote_file_path = os.path.join(remote_directory, last_file)
print(f"上传文件: {local_file_path}")
print(f"云端路径: {remote_file_path}")
# 上传文件,并获取服务器返回的响应
response = upload_file(token, local_file_path, remote_file_path)
print('Response:', response) # 打印响应结果,便于调试
# 根据服务器返回的结果显示提示信息 这里显示弹窗的,如果不想显示弹窗就把下面这段注释掉
if response.get("message") == "success":
show_message("备份成功,正在传输中...", "备份成功")
else:
show_message("任务失败,请检查并重试。", "任务失败")
# 程序执行入口
if __name__ == "__main__":
main()
代码都是网上找的和智谱清言上问的,所以代码比较乱,但是我可以确保代码没问题,可以正常上传,配合zTasker 任务类型 运行cmd命令 python D:\backup\zTasker\33.py python文件路径改成你们自己的就行
修改--我用gpt优化了一下代码,添加了详细的注释,只要你懂一点编程的基本都能看懂,注释很详细,有什么需要修改或想添加功能的问GPT就行,现在AI在编程这块还是很强大的
|
评分
-
查看全部评分
|