我的 环境:seafile 8.0.3
其他版本的接口调用还是有区别的!特别是7之前的接口和新版本接口有些参数不一样了。
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # @Time : 2023/10/26 17:39
- # @Author : chentufeng
- # @File : upload_seafile.py
- # @desc : 上传文件到云盘
- # !/usr/bin/env python3
- # -*- coding: utf-8 -*-
- # 这是python2的。python3应该也通用,可能要小改一下,但接口调用一样
-
-
- import os
- import json
- import requests
- import sys
- import commands
- reload(sys)
- sys.setdefaultencoding('utf-8')
-
- class UploadFile:
- def __init__(self, url, username, password, repo_id):
- self.url = url
- self.data = {'username': username, 'password': password}
- self.token_url = '%s/api2/auth-token/'%url
- self.token = self.get_token()
- self.upload_link = '%s/api2/repos/%s/upload-link/'%(url, repo_id)
-
- # 获取上传链接
- @staticmethod
- def _get_upload_link(url, token):
- resp = requests.get(url, headers={'Authorization': 'Token {token}'.format(token=token)})
- print(resp)
- return resp.json()
-
- # 获取token
- def get_token(self):
- try:
- print('>>>>>getting token...')
- response = requests.post(self.token_url, data=self.data)
- token = json.loads(response.content.decode())
- print(token)
- return token['token']
- except KeyError as e:
- print('user login failed!')
- print(e)
-
- # 上传文件
- def upload_file(self, filepath, relative_path):
- # parent_dir 参数默认为空,应该是 seafile 8.0.3 开始,7之前是没有relative_path 参数的。
- print('>>>>>uploading %s...' % filepath)
- self.upload_link = self._get_upload_link(self.upload_link, self.token)
- print("上传链接是: %s"%self.upload_link)
- # print(folderpath)
-
- response = requests.post(
- self.upload_link, data={'filename': os.path.basename(filepath),
- 'parent_dir': '', 'relative_path': relative_path, 'replace': 1},
- files={'file': open(filepath, 'rb')},
- headers={'Authorization': 'Token {token}'.format(token=self.token)}
- )
- print(str(response))
- if str(response) == '
' : - print('>>>>>文件[%s]上传 success!'%filepath)
- else:
- print('>>>>>文件[%s]上传 failed!'%filepath)
-
-
-
-
-
-
- if __name__ == '__main__':
- upload_file_path = "/data/aa.txt" # 需要上传的文件本地路径
- relative_path = "test" # 指定要上传到云盘哪个路径
-
- base_url = 'https://yunpan.com'
- repo_id = 'xxxx' # 资料库ID
- username = 'xxxx' # 用户名
- password = 'xxxx' # 密码
- f = UploadFile(base_url, username, password, repo_id)
- f.upload_file(upload_file_path, relative_path)