基本概念
oss:对象存储服务,它由若干bucket构成;
bucket:最基本的对象存储单元,上级是oss;
AccessKeyID:RAM访问控制当中,为了方便对人员管理而引入的概念;方便给用户授权对oss存储对象进行访问;在RAM访问控制中,有用户组,用户的概念,一个用户可以加入多个用户组;每个用户都有一个唯一的AccessKey ID;
AccessKeySecret:类似于密钥,和AccessKeyID配合使用,每个AccessKeyID都会有一个AccessKeySecret与之匹配;
Endpoint:地域节点,可以在oss管理控制台概览里面查看,外网访问和内网访问是不一样的;
阿里云OSS服务的使用
使用OSS服务的使用步骤:
RAM访问控制
创建用户,获取用户的AccessKeyID和AccessKeySecret,注意AccessKeySecret只在用户创建成功后会显示,此时应该妥善保存,以免遗忘。
创建用户组。可选。方便对多个用户进行授权管理。
用户授权。非常重要。对于创建的用户,如果需要访问bucket的对象,需要给其授权AliyunIVPDFullAccess;
用户组授权。类似于用户授权。它与用户授权的区别是:用户组的授权对于其组内的所有用户有效(前提是该用户的权限继承自用户组的情况下,这通常是默认情况)。而用户授权只对该特定用户有效。
OSS对象存储
进入oss控制台,打开bucket列表,创建新的bucket。bucket是对象存储的基本管理单元。所以他的命名应该符合对象的特性或用途。
授权。如果需要读写,则需要授权为公共读写。
代码实例
from pathlib import Path
from concurrent import futures
import requests
import oss2
import pandas
import cv2
import base64
def upload_image_to_oss(bucket,bucket_domain_name,imgdata,imgpath):
if not bucket.object_exists(imgpath):
bucket.put_object(imgpath,imgdata,headers = oss2.CaseInsensitiveDict())
return f'{bucket_domain_name}/{imgpath}'
def image_data_from_url(image_url):
try:
rep = requests.get(image_url,
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate'
},
timeout=10)
rep.raise_for_status()
return rep.content
except (requests.exceptions.ConnectTimeout,
requests.exceptions.ReadTimeout):
raise RuntimeError('请求图片数据超时')
def image_data_from_local(image_path):
imgformat = '.' + image_path.rsplit('.',1)[1]
if imgformat == '.png' or imgformat == ".PNG":
image = cv2.imread(image_path,cv2.IMREAD_UNCHANGED)
else:
image = cv2.imread(image_path,cv2.IMREAD_COLOR)
imencode = cv2.imencode(imgformat, image)[1]
strbase64 = str(base64.b64encode(imencode))[2:-1]
img_bin = base64.b64decode(strbase64)
return img_bin
if __name__ == '__main__':
#oss里面新建的bucket的名字,可以在oss控制台bucket list里面查询
OSS_BUCKET = 'your_bucket_name'
#RAM访问控制里新建用户的keyID和keysecret
OSS_KEY_ID = 'your_AccessKeyID'
OSS_SECRET_KEY = 'your_AccessKeySecret'
#end point,在oss控制台概览里面可以查到
OSS_REGION = 'oss-cn-shanghai.aliyuncs.com'
auth = oss2.Auth(OSS_KEY_ID, OSS_SECRET_KEY)
bucket = oss2.Bucket(auth, OSS_REGION, OSS_BUCKET)
#bucket_domain_name可以在oss控制台概览里面查到
bucket_domain_name = "your_bucket_domain_name"
image_data1 = image_data_from_url("https://ssss/sss.png")
image_data2 = image_data_from_local("./template1.jpg")
url1 = upload_image_to_oss(bucket = bucket,bucket_domain_name = bucket_domain_name,imgdata = image_data1,imgpath = "dddd/pppq.png")
url2 = upload_image_to_oss(bucket = bucket,bucket_domain_name = bucket_domain_name,imgdata = image_data2,imgpath = "dddd/qqqp.jpg")
print(url1)
print(url2)