python 阿里云批量上传图片(网络流)

将网络图片上传到阿里云,使用网络流,无需下载本地

import os
import uuid

import oss2
import requests
import yaml


# 读配置文件
def read_config(file_path):
    if not os.path.isfile(file_path):
        print('config file not found:%s',file_path)
        return False
    with open(file_path, 'r', encoding='utf-8') as f:
        config = yaml.load(f)
    return config


def up_pic(ranks, times=3):
    for v in ranks:
        if v['iconlink']:
            flag = 0
            url = v['iconlink']
            u = str(uuid.uuid1())
            while times:
                try:
                    result = upload(img_url=url, uuid=u)
                except Exception as e:
                    times = 1
                    print('[upload_pic Error] %s', e)
                if result:
                    flag = 0
                    v['iconlink'] = result
                    break
                else:
                    flag = 1
                    print('[upload_pic defeat ] %s', times)
            if flag == 1:
                v['iconlink'] = url
        else:
            print('[not pic] %s', v)
    return ranks


def upload(img_url, uuid):
    # uuid是唯一的,保证图片名不会重复
    uuid = uuid + '.jpg'  
    # 以下为配置参数
    region = 'hotsquare'
    accessId = config['clouds'][region]['aliyun_accessid']
    accessKey = config['clouds'][region]['aliyun_accesskey']
    oss_endpoint = config['clouds'][region]['oss_endpoint']
    bucketname = config['clouds'][region]['backet_pic']
    host_pic = config['clouds'][region]['host_pic']
    # 上传图片
    auth = oss2.Auth(accessId, accessKey)
    bucket = oss2.Bucket(auth, oss_endpoint, bucketname)
    input = requests.get(img_url)
    result = bucket.put_object(uuid, input)
    if result:
        return host_pic + uuid
    return False


if __name__ == '__main__':
    config = read_config('config.yaml')
    # 存放图片链接的列表
    # pic_list内是字典,类似:{'iconlink':pic_url}
    # 遍历时会检查iconlink
    pic_list = []
    # 上传完成后返回的图片链接列表
    results = up_pic(pic_list)

 config.yaml文件格式

clouds:
  hotsquare:
    aliyun_accessid : 
    aliyun_accesskey: 
    oss_endpoint: 
    backet_pic: 
    host_pic: 
    mns_endpoint: 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值