-
Notifications
You must be signed in to change notification settings - Fork 115
0x06 上传和下载
ZaxTyson edited this page Oct 7, 2020
·
8 revisions
上传文件到网盘
参数 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
file_path | str | 本地文件路径 | Y | 使用绝对路径 |
folder_id | int | 网盘文件夹id | N | 默认-1 (根目录) |
callback | func | 进度回调函数 | N | 默认None
|
uploaded_handler | func | 上传回调函数 | N | 默认None
|
说明 :
- 本方法解除了文件格式和文件大小限制(默认禁止上传)
- 上传一个网盘中已经存在的文件,默认执行 覆盖操作
- 上传大文件时,自动在网盘创建文件夹以保存数据块,本地临时文件夹为
__filename
, 上传完成自动删除 - 大文件支持续传,从上一块成功上传的数据结尾开始续传
进度回调函数: 该函数用于跟踪上传进度
show_progress(file_name, total_size, now_size)
参数 | 类型 | 说明 |
---|---|---|
file_name | str | 上传文件名 |
total_size | int | 文件总字节数 |
now_size | int | 已上传字节数 |
上传回调函数: 该函数用于上传完成后进一步处理文件(设置提取码, 描述信息等)
uploaded_handler(fid, is_file)
参数 | 类型 | 说明 |
---|---|---|
fid | int | 文件(夹)id |
is_file | bool | fid是否文件id |
示例:
>>> def show_progress(file_name, total_size, now_size):
... """显示进度的回调函数"""
... percent = now_size / total_size
... bar_len = 40 # 进度条长总度
... bar_str = '>' * round(bar_len * percent) + '=' * round(bar_len * (1 - percent))
... print('\r{:.2f}%\t[{}] {:.1f}/{:.1f}MB | {} '.format(
... percent * 100, bar_str, now_size / 1048576, total_size / 1048576, file_name), end='')
... if total_size == now_size:
... print('') # 下载完成换行
>>> def handler(fid, is_file):
if is_file:
lzy.set_desc(fid, '这是文件的描述', is_file=True)
>>> code= lzy.upload_file(r"D:\zaxtyson\Softwares\ChromeSetup.exe", -1, callback=show_progress, uploaded_handler=handler)
100.00% [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 1.1/1.1MB | ChromeSetup.exe
>>> code == LanZouCloud.SUCCESS
True
状态码(code):
- 上传成功:
LanZouCloud.SUCCESS
- 上传失败:
LanZouCloud.FAILED
- 文件路径错误:
LanZouCloud.PATH_ERROR
- 网络异常:
LanZouCloud.NETWORK_ERROR
- 在网盘创建文件夹失败:
LanZouCloud.MKDIR_ERROR
- 验证码错误:
LanZouCloud.CAPTCHA_ERROR
- 官方禁止的操作:
LanZouCloud.OFFICIAL_LIMITED
上传一个文件夹
参数 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
dir_path | str | 本地文件夹路径 | Y | 使用绝对路径 |
folder_id | int | 网盘文件夹id | N | 默认-1 (根目录) |
callback | func | 进度回调函数 | N | 默认None
|
failed_callback | func | 失败处理回调函数 | N | 默认None
|
uploaded_handler | func | 上传回调函数 | N | 默认None
|
失败处理回调函数 : 用于处理批量上传时失败的文件
show_failed_callback(code, filename)
参数 | 类型 | 说明 |
---|---|---|
code | int | 错误码 |
filename | str | 上传文件名 |
示例 :
>>> def show_failed(code, filename):
... """显示失败文件的回调函数"""
... print(f"下载失败,错误码: {code}, 文件名: {filename}
>>> code= lzy.upload_dir(r"D:\test", 1276036, callback=show_progress, failed_callback=show_failed, uploaded_handler=handler)
100.00% [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 11.5/11.5MB | AIDA64.exe
100.00% [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 0.3/0.3MB | Ascgen2.exe
100.00% [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 16.9/16.9MB | Bandicam_4.1.zip
100.00% [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 8.1/8.1MB | chromedriver.exe
100.00% [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 1.1/1.1MB | ChromeSetup.exe
100.00% [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 3.0/3.0MB | CrystalDiskMark.zip
>>> code
True
状态码(code):
- 全部上传成功:
LanZouCloud.SUCCESS
- 部分上传失败:
LanZouCloud.FAILED
- 文件路径错误:
LanZouCloud.PATH_ERROR
- 网络异常:
LanZouCloud.NETWORK_ERROR
- 在网盘创建文件夹失败:
LanZouCloud.MKDIR_ERROR
- 官方禁止的操作:
LanZouCloud.OFFICIAL_LIMITED
通过分享链接下载文件
参数 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
share_url | str | 文件分享链接 | Y | - |
pwd | str | 提取码 | N | 默认''
|
save_path | str | 文件保存路径 | N | 默认./Download
|
overwrite | bool | 文件重名是否覆盖 | N | 默认False
|
callback | func | 回调函数 | N | 默认None
|
downloaded_handler | func | 下载完成回调函数 | N | 默认None
|
下载完成回调函数 downloaded_handler(file_path)
参数 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
file_path | str | 文件的绝对路径 | Y | - |
注意 :
- API 支持下载续传,普通文件下载完成之前后缀为
.download
,大文件下载完成之前通过filename.record
文件记录进度,请勿手动删除 - 下载
dwg
、gho
、iso
文件时可能要求验证,API 会自动处理,但是需要至少 2s 的时间 - 您在网盘看见的文件名与下载时得到的文件名不一定一致,因为
- 官方可能对某些敏感词进行替换(奇葩操作)
- 官方有时候会去掉文件名中的某些符号
- API 对不支持上传的文件进行伪装上传,下载完成才知道文件后缀
-
callback()
函数的文件名不一定是本地文件的真实文件名,而downloaded_handler()
一定是下载完成后文件的绝对路径 -
overwrite=True
将自动覆盖同名文件,而伪装后缀的文件只有在下载完成才知道真实后缀,比如网盘显示abc.zip
实际文件名abc.jpg
,它将覆盖本地的abc.jpg
文件 -
overwrite=False
且存在同名文件时,将在当前下载的文件后添加序号filename(N).xx
以便区分
示例 :
>>> def after_downloaded(file_name):
... """下载完成后的回调函数"""
... print(f"文件绝对路径为:{file_name}")
>>> code = lzy.down_file_by_url('https://www.lanzous.com/i6zgwnc', 'haha', r'D:\Download', downloaded_handler=after_downloaded)
文件绝对路径为:D:\Download\Craig David - Insomnia.mp3
>>> code == LanZouCloud.SUCCESS
True
返回值 :
- 链接非法返回:
LanZouCloud.URL_INVALID
- 文件已取消返回:
LanZouCloud.FILE_CANCELLED
- 全部成功返回:
LanZouCloud.SUCCESS
- 下载失败返回:
LanZouCloud.FAILED
- 缺少提取码返回:
LanZouCloud.LACK_PASSWORD
- 提取码错误返回:
LanZouCloud.PASSWORD_ERROR
- 验证码错误:
LanZouCloud.CAPTCHA_ERROR
登录后通过 id 下载文件
参数 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
fid | int | 文件id | Y | - |
save_path | str | 文件保存路径 | N | 默认./Download
|
overwrite | bool | 文件重名是否覆盖 | N | 默认False
|
callback | func | 回调函数 | N | 默认None
|
downloaded_handler | func | 下载完成回调函数 | N | 默认None
|
说明 : 本方法与 .down_file_by_url()
相同,通过 id 下载无需提取码
.down_dir_by_url(share_url, dir_pwd, save_path, *, mkdir, callback, failed_callback, overwrite, downloaded_handler, recursive)
通过分享链接下载文件夹
参数 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
share_url | str | 文件夹分享链接 | Y | - |
dir_pwd | str | 提取码 | N | 默认空 |
save_path | str | 文件保存路径 | N | 默认./Download
|
mkdir | bool | 自动创建子文件夹 | N | 默认 True
|
callback | func | 进度回调函数 | N | 默认None
|
failed_callback | func | 失败处理回调函数 | N | 默认None
|
overwrite | bool | 文件重名是否覆盖 | N | 默认False
|
downloaded_handler | func | 下载完成回调函数 | N | 默认None
|
recursive | bool | 递归下载子文件夹 | N | 默认False
|
说明:
- 下载文件夹时,只会下载其中的文件,不会递归下载
- 下载大文件的数据文件夹时,自动合并处理
- 默认使用文件夹提取码做文件提取码,文件提取码与文件夹不一致时无法下载
- 下载普通文件夹时覆盖操作针对全部子文件,下载大文件的数据文件夹时覆盖操作针对大文件本身
失败处理回调函数 :
参数 | 类型 | 说明 |
---|---|---|
code | int | 错误码 |
file | FileInFolder | 下载的文件 |
示例 :
>>> code = lzy.download_dir('https://www.lanzous.com/b0f18rcla', 'haha', r'D:\Download')
>>> code == LanZouCloud.SUCCESS
True
状态码(code):
- 链接非法:
LanZouCloud.URL_INVALID
- 文件已取消:
LanZouCloud.FILE_CANCELLED
- 全部下载成功:
LanZouCloud.SUCCESS
- 部分下载失败:
LanZouCloud.FAILED
- 缺少提取码:
LanZouCloud.LACK_PASSWORD
- 提取码错误:
LanZouCloud.PASSWORD_ERROR
.down_dir_by_id(fid, save_path, *, callback, failed_callback, overwrite, downloaded_handler, recursive)
登录后通过 id 下载文件夹
参数 | 类型 | 说明 | 必填 | 备注 |
---|---|---|---|---|
fid | int | 文件夹id | Y | - |
save_path | str | 文件保存路径 | N | 默认./Download
|
mkdir | bool | 自动创建子文件夹 | N | 默认 True
|
callback | func | 进度回调函数 | N | 默认None
|
failed_callback | func | 失败处理回调函数 | N | 默认None
|
overwrite | bool | 文件重名是否覆盖 | N | 默认False
|
downloaded_handler | func | 下载完成回调函数 | N | 默认None
|
recursive | bool | 递归下载子文件夹 | N | 默认False
|
说明 : 本方法与 .down_dir_by_url()
相同,使用 id 无需提取码