Python使用seafileAPI批量快速下载数据
解决的问题
从seafile等管理工具下载文件时,需要多次点击鼠标,比较繁琐,甚至还会出现单个文件夹太大无法下载的情况

本文基于seafileAPI使用python代码,实现类似于os.path.walk方法对云端文件批量操作,提升文件处理和下载速度
一、获取token
import requests
seafile_root = "http://your_seafile_root:8888"
url_token = f"{seafile_root}/api2/auth-token/"
payload = {
"username": "your_seafile_username",
"password": "your_seafile_password"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url_token, json=payload, headers=headers)
print(response.text)
此时可以获取账号对应的token

二、获取文件夹repo_id
当我们获得token之后,就不需要用户的账号和密码了,后续操作都将token作为当前用户的验证信息

在seafile根目录进入一个文件夹时,可以看到url出现了一个新的编号,这个编号就是repo_id

seafile里每个一级文件夹名称都会有对应的唯一编号,即repo_id
后续下载文件时,repo_id是云端文件路径的一部分,所以需要获取所有一级文件夹名称和repo_id的对应关系
import requests
import json
# 获取所有repo_id
server_url = "http://your_seafile_root:8888"
# 这里填写上一段代码获取的token
token = 'ABC_your_Token_123456'
# 构建请求头
headers = {
'Authorization': f'Token {token}'
}
# 发起 GET 请求获取所有库的列表
response = requests.get(f'{server_url}/api2/repos/', headers=headers)
# 检查响应状态码
if response.status_code == 200:
# 解析响应内容
repos_list = json.loads(response.content)
for repo in repos_list:
print(f"Repo Name: {repo['name']}, Repo ID: {repo['id']}, ")
else:
print(f"获取库列表失败,状态码: {response.status_code}")
print(f"错误信息: {response.text}")
此时可以获取seafile上一级文件夹的对应repo_id

TODO:
- 获取Token
- 获取repo_id
- 单个文件下载
- 递归获取文件夹路径
- 批量文件下载
- 并发请求加速
有时间补充完整
1289



被折叠的 条评论
为什么被折叠?



