import time import oss2 import os class OSS_object(): def __init__(self): # 懒加载:只读取凭证,不立即连接 OSS。 # 本地用 output_format=base64 时不配 OSS 凭证也能启动服务; # 仅在真正调用 upload_file 时才校验并连接。 self.access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '') self.access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '') self.bucket_name = os.getenv('OSS_TEST_BUCKET', '') self.endpoint = os.getenv('OSS_TEST_ENDPOINT', '') self.bucket = None def _ensure_bucket(self): if self.bucket is not None: return for param in (self.access_key_id, self.access_key_secret, self.bucket_name, self.endpoint): assert '<' not in param, '请设置环境变量 OSS_TEST_ACCESS_KEY_ID / OSS_TEST_ACCESS_KEY_SECRET / OSS_TEST_BUCKET / OSS_TEST_ENDPOINT' self.bucket = oss2.Bucket(oss2.Auth(self.access_key_id, self.access_key_secret), self.endpoint, self.bucket_name) def upload_file(self, file, target_name): self._ensure_bucket() t0 = time.time() with open(oss2.to_unicode(file), 'rb') as f: ret = self.bucket.put_object(target_name, f) print(ret.headers['x-oss-request-id']) url = "https://oss-aidigitalfield.oss-cn-beijing.aliyuncs.com/{}".format(target_name) print('耗时:{},签名url的地址为:{}'.format(time.time() - t0, url)) return url if __name__ == '__main__': oss_2 = OSS_object() t0 = time.time() url = oss_2.upload_file('/home/szlc/Downloads/多中心录入模版.xlsx', 'tongji/多中心录入模版.xlsx') print('url:', url)