0. 注册/安装
注册/安装/以及所需的值
https://blog.csdn.net/qq_52385631/article/details/123057722?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164604501216780271995509%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=164604501216780271995509&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-123057722.nonecase&utm_term=cos&spm=1018.2226.3001.4450
1. python后端使用安装
pip install -U cos-python-sdk-v5
2. python使用函数封装
# -*- coding:utf-8 -*-
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
from django.conf import settings
from qcloud_cos.cos_exception import CosServiceError
def create_bucket(Bucket, region='ap-chengdu'):
"""创建桶
pip install -U cos-python-sdk-v5
APPID 跟密钥在一块
在
https://console.cloud.tencent.com/cam/capi
获取
bucket = 手机号-当前时间-APPID
bucket = '{}-{}-1305448189'.format(request.tracer.user.mobile_phone, str(int(time.time())))
"""
secret_id = settings.TENCENT_COS_ID # 替换为用户的 secretId
secret_key = settings.TENCENT_COS_KEY # 替换为用户的 secretKey
region = region # 替换为用户的 Region
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key)
client = CosS3Client(config)
client.create_bucket(
# Bucket='test-1305448189',
Bucket=Bucket,
ACL="public-read" # private / public-read / public-read-write
)
# 跨域
cors_config = {
'CORSRule': [
{
'AllowedOrigin': '*',
'AllowedMethod': ['GET', 'PUT', 'HEAD', 'POST', 'DELETE'],
'AllowedHeader': "*",
'ExposeHeader': "*",
'MaxAgeSeconds': 500
}
]
}
client.put_bucket_cors(
Bucket=Bucket,
CORSConfiguration=cors_config
)
def upload_img(Bucket, region, Body, Key):
"""上传图片文件
key 自己起的文件名称,一般拼凑出一个文件名称
"""
secret_id = settings.TENCENT_COS_ID # 替换为用户的 secretId
secret_key = settings.TENCENT_COS_KEY # 替换为用户的 secretKey
region = region # 替换为用户的 Region
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key)
client = CosS3Client(config)
response = client.upload_file_from_buffer(
Bucket=Bucket,
Body=Body, # 文件对象
Key=Key # 上传到桶之后的文件名
)
# https://19803630852-1632301164-1305448189.cos.ap-chengdu.myqcloud.com/bd67b5c4b627b321372b483075a47992.png
return 'https://{}.cos.{}.myqcloud.com/{}'.format(Bucket, region, Key)
def delete_file(Bucket, region, Key):
"""删除文件"""
secret_id = settings.TENCENT_COS_ID # 替换为用户的 secretId
secret_key = settings.TENCENT_COS_KEY # 替换为用户的 secretKey
region = region # 替换为用户的 Region
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key)
client = CosS3Client(config)
client.delete_object(
Bucket=Bucket,
Key=Key # 上传到桶之后的文件名
)
def delete_file_obj(Bucket, region, Key):
"""批量删除文件"""
'''
objects = {
"Quiet": "true",
"Object": [
{
"Key": "file_name1"
},
{
"Key": "file_name2"
}
]
}
'''
secret_id = settings.TENCENT_COS_ID # 替换为用户的 secretId
secret_key = settings.TENCENT_COS_KEY # 替换为用户的 secretKey
region = region # 替换为用户的 Region
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key)
client = CosS3Client(config)
objects = {
"Quiet": "true",
"Object": Key
}
client.delete_objects(
Bucket=Bucket,
Delete=objects # 上传到桶之后的文件名
)
def credential(bucket, region):
'''
获取cos上传临时凭证
pip3 install -U qcloud-python-sts
'''
from sts.sts import Sts
config = {
# 临时密钥有效时长,单位是秒(30分钟=1800秒)
'duration_seconds': 1800,
# 固定密钥 id
'secret_id': settings.TENCENT_COS_ID,
# 固定密钥 key
'secret_key': settings.TENCENT_COS_KEY,
# 换成你的 bucket
'bucket': bucket,
# 换成 bucket 所在地区
'region': region,
# 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径
# 例子: a.jpg 或者 a/* 或者 * (使用通配符*存在重大安全风险, 请谨慎评估使用)
'allow_prefix': '*',
# 密钥的权限列表。简单上传和分片需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/31923
'allow_actions': [
# "name/cos:PutObject",
# 'name/cos:PostObject',
# 'name/cos:DeleteObject',
# "name/cos:UploadPart",
# "name/cos:UploadPartCopy",
# "name/cos:CompleteMultipartUpload",
# "name/cos:AbortMultipartUpload",
"*",
],
}
sts = Sts(config)
result_dict = sts.get_credential()
return result_dict
def check_file(bucket, region, key):
'''校验文件'''
config = CosConfig(Region=region, SecretId=settings.TENCENT_COS_ID, SecretKey=settings.TENCENT_COS_KEY)
client = CosS3Client(config)
data = client.head_object(
Bucket=bucket,
Key=key
)
return data
def delete_bucket(bucket, region):
""" 删除桶 """
# 删除桶中所有文件
# 删除桶中所有碎片
# 删除桶
config = CosConfig(Region=region, SecretId=settings.TENCENT_COS_ID, SecretKey=settings.TENCENT_COS_KEY)
client = CosS3Client(config)
try:
# 找到文件 & 删除
while True:
part_objects = client.list_objects(bucket)
# 已经删除完毕,获取不到值
contents = part_objects.get('Contents')
if not contents:
break
# 批量删除
objects = {
"Quiet": "true",
"Object": [{'Key': item["Key"]} for item in contents]
}
client.delete_objects(bucket, objects)
if part_objects['IsTruncated'] == "false":
break
# 找到碎片 & 删除
while True:
part_uploads = client.list_multipart_uploads(bucket)
uploads = part_uploads.get('Upload')
if not uploads:
break
for item in uploads:
client.abort_multipart_upload(bucket, item['Key'], item['UploadId'])
if part_uploads['IsTruncated'] == "false":
break
client.delete_bucket(bucket)
except CosServiceError as e:
pass