全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1362|回复: 10
打印 上一主题 下一主题

[Windows VPS] 懂Python的大佬帮看下如何改造天翼云盘 CLI Python项目

[复制链接]
跳转到指定楼层
1#
发表于 2020-12-27 16:42:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ddane 于 2020-12-27 16:48 编辑

项目:https://github.com/Aruelius/cloud189

这个你们熟悉吧,想改造如下造福MJJ

场景:
本地文件夹:D:\mjj,下有1.txt、2.txt两个文件


执行命令:python main.py upload -f D:\mjj(上传D:\mjj文件夹)
希望实现:
上传 D:\mjj\1.txt 完成
删除 D:\mjj\1.txt 完成
上传 D:\mjj\2.txt 完成
删除 D:\mjj\2.txt 完成

如此一来就可以实现小鸡搬运百度网盘资源到天翼网盘了。

求助:始终找不到单文件( D:\mjj\1.txt)的上传指令在哪个位置,他好像是上传完整个文件夹才结束,我加删除命令直接删除整个本地文件夹了,不能实现实时上传单文件,实时删除单文件。

老少爷们们出出主意呗。删除命令应该加哪里,MJJ需要这个啊

文件夹上传代码段:
  1.     def upload_dir(self, folder_path, parrent_fid=-11, force=False, mkdir=True, callback=None,
  2.                    failed_callback=None, up_handler= None):
  3.         """文件夹上传接口
  4.         :param str file_path: 待上传文件路径
  5.         :param int folder_id: 上传目录 id
  6.         :param bool force: 强制上传已经存在的文件(文件名、大小一致的文件)
  7.         :param bool mkdir: 是否在 parrent_fid 创建父文件夹
  8.         :param func callback: 上传进度回调
  9.         :param func failed_callback: 错误回调
  10.         :param func up_handler: 上传文件数回调
  11.         :return: UpCode list  or  Cloud189 error code(mkdir error)
  12.         """
  13.         if not os.path.isdir(folder_path):
  14.             logger.error(f"Upload dir: [{folder_path}] is not a file")
  15.             return UpCode(Cloud189.PATH_ERROR)

  16.         dir_dict = {}
  17.         logger.debug(f'Upload dir: start parsing {folder_path=} structure...')
  18.         upload_files = []
  19.         folder_name = get_file_name(folder_path)
  20.         if mkdir:
  21.             result = self.mkdir(parrent_fid, folder_name)
  22.             if result.code != Cloud189.SUCCESS:
  23.                 return result  # MkCode

  24.             dir_dict[folder_name] = result.id
  25.         else:
  26.             dir_dict[folder_name] = parrent_fid

  27.         for home, dirs, files in os.walk(folder_path):
  28.             for _file in files:
  29.                 f_path = home + os.sep + _file
  30.                 f_rfolder = get_relative_folder(f_path, folder_path)
  31.                 logger.debug(f"Upload dir: {f_rfolder=}, {f_path=}, {folder_path=}")
  32.                 if f_rfolder not in dir_dict:
  33.                     dir_dict[f_rfolder] = ''
  34.                 upload_files.append((f_path, dir_dict[f_rfolder]))
  35.             for _dir in dirs:
  36.                 p_rfolder = get_relative_folder(
  37.                     home, folder_path, is_file=False)
  38.                 logger.debug(f"Upload dir: {p_rfolder=}, {home=}, {folder_path=}")
  39.                 dir_rname = p_rfolder + os.sep + _dir  # 文件夹相对路径

  40.                 result = self.mkdir(dir_dict[p_rfolder], _dir)
  41.                 if result.code != Cloud189.SUCCESS:
  42.                     logger.error(
  43.                         f"Upload dir: create a folder in the upload sub folder{dir_rname=} failed! {folder_name=}, {dir_dict[p_rfolder]=}")
  44.                     return result  # MkCode
  45.                 logger.debug(
  46.                     f"Upload dir: folder successfully created {folder_name=}, {dir_dict[p_rfolder]=}, {dir_rname=}, {result.id}")
  47.                 dir_dict[dir_rname] = result.id
  48.         up_codes = []
  49.         total_files = len(upload_files)
  50.         for index, upload_file in enumerate(upload_files, start=1):
  51.             if up_handler:
  52.                 up_handler(index, total_files)
  53.             logger.debug(f"Upload dir: file [{upload_file[0]}] enter upload process...")
  54.             up_code = self.upload_file(upload_file[0], upload_file[1], force=force, callback=callback)
  55.             if failed_callback and up_code.code != Cloud189.SUCCESS:
  56.                 failed_callback(up_code.code, up_code.path)
  57.                 logger.debug(f"Up Dir Code: {up_code.code=}, {up_code.path=}")
  58.             up_codes.append(up_code)
  59.             logger.debug(f"Dir: {index=}, {total_files=}")
  60.         return up_codes
复制代码







2#
发表于 2020-12-27 17:05:31 | 只看该作者
“def upload_dir” 上面一段函数。不就是

"""单个文件上传接口

https://github.com/Aruelius/cloud189/blob/a6765d1dbae47106f522f7af024716603229c50f/cloud189/api/core.py#L651
3#
发表于 2020-12-27 17:09:57 来自手机 | 只看该作者
天翼云盘挂载本地WebDAV 能上传吗
4#
 楼主| 发表于 2020-12-27 17:17:32 | 只看该作者
似毛非毛 发表于 2020-12-27 17:05
“def upload_dir” 上面一段函数。不就是

"""单个文件上传接口

单个文件上传接口我知道,这个就意味着执行上传命令的时候有100个文件就需要执行100次命令了,其实上传文件夹的时候也是一个一个文件的上传,在单文件结束时候加入删除命令就可以了,这样只需要执行一个命令
5#
 楼主| 发表于 2020-12-27 17:20:05 | 只看该作者
惜为伊人醉 发表于 2020-12-27 17:09
天翼云盘挂载本地WebDAV 能上传吗

这个没有试过啊
6#
发表于 2020-12-27 17:33:40 | 只看该作者
ddane 发表于 2020-12-27 17:17
单个文件上传接口我知道,这个就意味着执行上传命令的时候有100个文件就需要执行100次命令了,其实上传文 ...

他这好像分客户端模式。和网页模式。你要改哪个模式
7#
 楼主| 发表于 2020-12-27 17:37:02 | 只看该作者
似毛非毛 发表于 2020-12-27 17:33
他这好像分客户端模式。和网页模式。你要改哪个模式

我是在win下登录账号方式使用,应该是客户端模式吧
8#
发表于 2020-12-27 17:37:53 | 只看该作者
ddane 发表于 2020-12-27 17:17
单个文件上传接口我知道,这个就意味着执行上传命令的时候有100个文件就需要执行100次命令了,其实上传文 ...


几个循环的事情啊,而且你这上传也是去循环的upload_file函数。
要不你改改创个upload_dir_and_delete()?
9#
发表于 2020-12-27 17:43:44 | 只看该作者
https://github.com/Aruelius/cloud189/blob/a6765d1dbae47106f522f7af024716603229c50f/cloud189/api/core.py#L550

550行后面回车加个:
os.remove(up_info.path)

试试?
10#
 楼主| 发表于 2020-12-27 17:56:03 | 只看该作者
本帖最后由 ddane 于 2020-12-27 18:35 编辑
似毛非毛 发表于 2020-12-27 17:43
https://github.com/Aruelius/cloud189/blob/a6765d1dbae47106f522f7af024716603229c50f/cloud189/api/core ...




完美

感谢大佬
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-10-19 00:39 , Processed in 0.070005 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表