| 28 | |
| 29 | |
| 30 | class TransferMgr(object): |
| 31 | def upload_file(self, path_dict): |
| 32 | ''' |
| 33 | 上传需要传递的资源文件 |
| 34 | :param path_dict:{ |
| 35 | 'params_key_name'(params中的字段名): 绝对路径 |
| 36 | } |
| 37 | :return: 传输中间数据文件 transfer_info |
| 38 | ''' |
| 39 | path_list = [] |
| 40 | for param_name in path_dict.keys(): |
| 41 | path_list.append( |
| 42 | { |
| 43 | 'params_key_name': param_name, |
| 44 | 'rel_path': os.path.relpath(path_dict[param_name], DATA_BASE) # 此处要想一想,是有必要这样 |
| 45 | } |
| 46 | ) |
| 47 | |
| 48 | for item in path_list: |
| 49 | file_path = os.path.join(DATA_BASE, item['rel_path']) |
| 50 | tmp_zip_file = tempfile.mktemp(prefix='zip_', dir=DATA_BASE, suffix='.zip') |
| 51 | Zip().compress(file_path, tmp_zip_file) |
| 52 | |
| 53 | # 获取一个八位的随机码作为文件名,防止重名 |
| 54 | file_name = ''.join(random.sample(string.ascii_letters + string.digits, 8)) |
| 55 | file_server = RetryFileServer(retry_times=2).get_server() |
| 56 | file_server.upload_file(tmp_zip_file, f"sourcedir/{file_name}") |
| 57 | PathMgr().rmpath(tmp_zip_file) |
| 58 | item['download_name'] = file_name |
| 59 | return { |
| 60 | 'isP2P': False, |
| 61 | 'path_list': path_list |
| 62 | } |
| 63 | |
| 64 | def download_file(self, transfer_info): |
| 65 | ''' |
| 66 | 下载资源文件 |
| 67 | ''' |
| 68 | logger.info('download file: 开始执行中间文件下载。。。') |
| 69 | logger.info('download file: 传输模式为文件服务器') |
| 70 | name_list = [path_dict['download_name'] for path_dict in transfer_info['path_list']] |
| 71 | path_dict = {} |
| 72 | for item in transfer_info['path_list']: |
| 73 | path_dict[item['download_name']] = item['rel_path'] |
| 74 | re = Downloader.file_server_download(path_dict=path_dict) |
| 75 | if re: |
| 76 | logger.info('download file: 传输完成') |
| 77 | return True |
| 78 | logger.info('download file: 传输失败') |
| 79 | raise TransferModuleError('传输模块,执行文件服务器拉取失败,请检查!') |
| 80 | |
| 81 | |
| 82 | if __name__ == "__main__": |