本帖最后由 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需要这个啊
文件夹上传代码段:
- def upload_dir(self, folder_path, parrent_fid=-11, force=False, mkdir=True, callback=None,
- failed_callback=None, up_handler= None):
- """文件夹上传接口
- :param str file_path: 待上传文件路径
- :param int folder_id: 上传目录 id
- :param bool force: 强制上传已经存在的文件(文件名、大小一致的文件)
- :param bool mkdir: 是否在 parrent_fid 创建父文件夹
- :param func callback: 上传进度回调
- :param func failed_callback: 错误回调
- :param func up_handler: 上传文件数回调
- :return: UpCode list or Cloud189 error code(mkdir error)
- """
- if not os.path.isdir(folder_path):
- logger.error(f"Upload dir: [{folder_path}] is not a file")
- return UpCode(Cloud189.PATH_ERROR)
- dir_dict = {}
- logger.debug(f'Upload dir: start parsing {folder_path=} structure...')
- upload_files = []
- folder_name = get_file_name(folder_path)
- if mkdir:
- result = self.mkdir(parrent_fid, folder_name)
- if result.code != Cloud189.SUCCESS:
- return result # MkCode
- dir_dict[folder_name] = result.id
- else:
- dir_dict[folder_name] = parrent_fid
- for home, dirs, files in os.walk(folder_path):
- for _file in files:
- f_path = home + os.sep + _file
- f_rfolder = get_relative_folder(f_path, folder_path)
- logger.debug(f"Upload dir: {f_rfolder=}, {f_path=}, {folder_path=}")
- if f_rfolder not in dir_dict:
- dir_dict[f_rfolder] = ''
- upload_files.append((f_path, dir_dict[f_rfolder]))
- for _dir in dirs:
- p_rfolder = get_relative_folder(
- home, folder_path, is_file=False)
- logger.debug(f"Upload dir: {p_rfolder=}, {home=}, {folder_path=}")
- dir_rname = p_rfolder + os.sep + _dir # 文件夹相对路径
- result = self.mkdir(dir_dict[p_rfolder], _dir)
- if result.code != Cloud189.SUCCESS:
- logger.error(
- f"Upload dir: create a folder in the upload sub folder{dir_rname=} failed! {folder_name=}, {dir_dict[p_rfolder]=}")
- return result # MkCode
- logger.debug(
- f"Upload dir: folder successfully created {folder_name=}, {dir_dict[p_rfolder]=}, {dir_rname=}, {result.id}")
- dir_dict[dir_rname] = result.id
- up_codes = []
- total_files = len(upload_files)
- for index, upload_file in enumerate(upload_files, start=1):
- if up_handler:
- up_handler(index, total_files)
- logger.debug(f"Upload dir: file [{upload_file[0]}] enter upload process...")
- up_code = self.upload_file(upload_file[0], upload_file[1], force=force, callback=callback)
- if failed_callback and up_code.code != Cloud189.SUCCESS:
- failed_callback(up_code.code, up_code.path)
- logger.debug(f"Up Dir Code: {up_code.code=}, {up_code.path=}")
- up_codes.append(up_code)
- logger.debug(f"Dir: {index=}, {total_files=}")
- return up_codes
复制代码
|