| 
 | 
 
 本帖最后由 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在编程这块还是很强大的 
 
 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |