# -*- coding: utf-8 -*- import shutil import oss2 class OssServeClient(object): def __init__(self, config): ''' 文件存储客户端 目前使用阿里云OSS对象存储服务 注意:文件读写,都是以object-name为索引,请保存object-name ''' self.auth = None self.bucket = None self._access_key_id = config.get("access_key_id", "") self._access_key_secret = config.get("access_key_secret", "") self._endpoint = config.get("endpoint", "") self._bucket_name = config.get("bucket_name", "") self.do_auth() def do_auth(self): ''' 身份验证 ''' auth = oss2.Auth(self._access_key_id, self._access_key_secret) bucket = oss2.Bucket(auth, self._endpoint, self._bucket_name) self.auth = auth self.bucket = bucket def delete_object(self, object_name: str) -> (any, any): ''' 删除内容 ''' result = self.bucket.delete_object(object_name) status, request_id = result.status, result.request_id return status, request_id def upload_bytes_file(self, object_name: str, file_content: bytes): ''' 文件上传 :param object_name: fid :param file_content: 文件流 :return: ''' result = self.bucket.put_object(object_name, file_content) status, request_id = result.status, result.request_id return status, request_id def download_file(self, object_name, save_path): ''' 文件下载到本地 :param object_name: fid :param save_path: 保存路径 :return: ''' object_stream = self.bucket.get_object_to_file(object_name, save_path) if object_stream.status == 200: return True def download_file_stream(self, object_name, filename): ''' 文件流下载 :param object_name: fid :param filename: 文件路径 :return: ''' object_stream = self.bucket.get_object(object_name) with open(filename, 'wb') as file: shutil.copyfileobj(object_stream, file) return object_stream.status, filename