| 48 | |
| 49 | |
| 50 | class FileServer(object): |
| 51 | def __init__(self, server_url=None, headers=None): |
| 52 | """ |
| 53 | 构造函数 |
| 54 | :return: |
| 55 | """ |
| 56 | if server_url: |
| 57 | self._server_url = server_url |
| 58 | self._headers = headers if headers else {} |
| 59 | else: |
| 60 | # 优先从环境变量读取文件服务器url和token,没有再使用默认值 |
| 61 | self._server_url = os.getenv("FILE_SERVER_URL", settings.FILE_SERVER['URL']) |
| 62 | file_server_token = os.getenv("FILE_SERVER_TOKEN", settings.FILE_SERVER['TOKEN']) |
| 63 | self._headers = {'Authorization': 'Token %s' % file_server_token} |
| 64 | |
| 65 | self._proxies = None |
| 66 | |
| 67 | def modify_save_time(self, rel_dir, days): |
| 68 | """ |
| 69 | 修改文件服务器的保存时间 |
| 70 | :param rel_dir: 修改的目录相对路径 |
| 71 | :param days: 修改保存时间天数 |
| 72 | :return: |
| 73 | """ |
| 74 | data = {"retention": days} |
| 75 | file_url = urljoin(self._server_url, rel_dir) |
| 76 | HttpClient(self._server_url, rel_dir, headers=self._headers, data=data, proxies=self._proxies).put() |
| 77 | logger.info('成功修改目录(%s)保存时间为 %s 天.' % (rel_dir, days)) |
| 78 | return file_url |
| 79 | |
| 80 | def __upload_data(self, data, rel_url, headers): |
| 81 | """ |
| 82 | 上传数据到文件服务器 |
| 83 | :param data: 要上传的数据, 可以是 Dictionary, bytes, or file-like object |
| 84 | :param rel_url: 上传到服务器的相对url |
| 85 | :return: 上传到服务器后的完整url, 如果上传失败, 返回 None |
| 86 | """ |
| 87 | file_url = urljoin(self._server_url, rel_url) |
| 88 | HttpClient(self._server_url, rel_url, headers=headers, data=data, proxies=self._proxies).put() |
| 89 | return file_url |
| 90 | |
| 91 | def upload_file(self, filepath, rel_url): |
| 92 | """ |
| 93 | 上传文件到文件服务器 |
| 94 | :param filepath: 要上传的文件路径 |
| 95 | :param rel_url: 上传到服务器的相对url |
| 96 | :return: 上传到服务器后的完整url, 如果上传失败, 返回 None |
| 97 | """ |
| 98 | with open(filepath, 'rb') as fp: |
| 99 | headers = { |
| 100 | "Content-SHA256": FlieHash.get_sha256(filepath), |
| 101 | "Content-MD5": FlieHash.get_md5(filepath) |
| 102 | } |
| 103 | headers.update(self._headers) |
| 104 | return self.__upload_data(fp, rel_url, headers) |
| 105 | |
| 106 | def load_data(self, rel_url): |
| 107 | """ |