Skip to content

0x06 上传和下载

ZaxTyson edited this page Oct 7, 2020 · 8 revisions

.upload_file(file_path, folder_id, *, callback, uploaded_handler)

上传文件到网盘

参数 类型 说明 必填 备注
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

.upload_dir(dir_path, folder_id, *, callback, failed_callback, uploaded_handler)

上传一个文件夹

参数 类型 说明 必填 备注
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

.down_file_by_url(share_url, pwd, save_path, *, callback, overwrite, downloaded_handler)

通过分享链接下载文件

参数 类型 说明 必填 备注
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 文件记录进度,请勿手动删除
  • 下载 dwgghoiso 文件时可能要求验证,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

.down_file_by_id(fid, save_path, *, callback, overwrite, downloaded_handler)

登录后通过 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 无需提取码