def upload_to_obs(tmp_file, activity_id): access_key_id = os.getenv('ACCESS_KEY_ID', '') secret_access_key = os.getenv('SECRET_ACCESS_KEY', '') endpoint = os.getenv('OBS_ENDPOINT', '') bucketName = os.getenv('OBS_BUCKETNAME_SECOND', '') if not access_key_id or not secret_access_key or not endpoint or not bucketName: logger.error('losing required arguments for ObsClient') sys.exit(1) obs_client = ObsClient(access_key_id=access_key_id, secret_access_key=secret_access_key, server='https://{}'.format(endpoint)) object_key = 'openeuler/miniprogram/activity/{}/sign_url.jpeg'.format(activity_id) obs_client.uploadFile(bucketName=bucketName, objectKey=object_key, uploadFile=tmp_file, taskNum=10, enableCheckpoint=True) img_url = 'https://{}.{}/{}'.format(bucketName, endpoint, object_key) return img_url
def obs_uplodfile(ak, sk, server, bucketname, localdir, obsdir_parent): ''' :param ak: obs的Access Key :param sk: obs的Secret Key :param server: obs的endpoint地址 :param bucketname: obs的名字 :param localdir: 需要上传到obs本地目录 :param obsdir_parent: 希望上传到obs后的目录名字 比如这里设置成mongodb_backup最终的备份目录为: mongodb_backup/2019-07/2019-07-08/ :return: ''' from obs import ObsClient import os import time # 创建ObsClient实例 obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server) DATE = time.strftime("%Y%m%d") MONTH = time.strftime("%Y%m") # 本地需要上传的目录 确保这个目录下都是文件 子目录不支持 localdir = localdir # bucketname bucketname = bucketname Logger().log('开始上传到 %s OBS ...' % bucketname) # 设置分段上传时的最大并发数 taskNum = 5 # 设置分段大小为10MB partSize = 10 * 1024 * 1024 # 开启断点续传模式 enableCheckpoint = True # obs上存放数据的文件夹 obsdir_parent = obsdir_parent obsdir = obsdir_parent + '/' + MONTH + '/' + DATE # mongodb_backup/2019-07/2019-07-08/ # 规范整理文件名和文件绝对路径 filename_list = [] abspath_list = [] for dir, _, file in os.walk(localdir): # 变量解压 filename_list = file for f in file: abspath = dir + "/" + f abspath_list.append(abspath) filename_abspath_list = zip(filename_list, abspath_list) for t in filename_abspath_list: # 设置待上传的本地文件,需要指定到具体的文件名 uploadFile = t[1] objectName = t[0] # 进行断点续传上传 try: # 创建obs存放数据的文件夹 cdir = obsClient.putContent(bucketname, obsdir, content=None) obs_filepath = os.path.join(obsdir, objectName) resp = obsClient.uploadFile(bucketname, obs_filepath, uploadFile, partSize, taskNum, enableCheckpoint) Logger().log('%s开始上传' % objectName) if resp.status < 300: Logger().log('%s上传成功\n' % objectName) # content='status:', resp['status'], 'filename:', resp['body']['key'] else: Logger().log('%s上传失败' % objectName, mode=False) #content= 'errorCode:', resp.errorCode, 'errorMessage:', resp.errorMessage # 操作失败时可再次调用断点续传上传接口进行重新上传 except Exception as e: Logger().log('%s上传失败,发生错误%s' % (objectName, e), mode=False)