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
Exemple #2
0
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)