# 预先定义共享的 CosConfig 实例 需要安装的包为 pip install cos-python-sdk-v5 import os import django from sixGuoDjango.settings import BASE_DIR os.environ.setdefault(key="DJANGO_SETTINGS_MODULE", value=f"{BASE_DIR.name}.settings") django.setup() import io from pathlib import Path import jmespath import pydash from qcloud_cos import CosConfig, CosS3Client default_config = CosS3Client( CosConfig( Region="ap-nanjing", SecretId="AKID5FE1e4SjPvFLvLNEvRm8KJ5h86sRXR9e", SecretKey="NWTFoDUaWHvOhrriMo4FG7pOmxwxpY7V", Token=None, Scheme="https", Domain="hudie.xiao.band"), ) class oss上传腾讯云图片: """ from qcloud_cos import CosConfig from qcloud_cos import CosS3Client """ # key: str # Bucket: str = "sixgou-1320557642" # 腾讯云配置(元宝) Bucket: str = "six-1407732583" # 蝴蝶云配置 client: CosS3Client = default_config @classmethod def 上传图片(cls, key: str, file, ): """ :param key: 目录名称 :param file: 文件的bytes类型文件 """ response = cls.client.upload_file_from_buffer(Bucket=cls.Bucket, Key=key, Body=file, ) # Body: 文件的 bytes 类型数据 必须要是一个可以调用read()方法的对象 print(response) data = cls.批量查询图片链接(Key=key) src = pydash.get(obj=data, path="src") # print( src ) return src @classmethod def update本地图片文件(cls, key: str, filename: str, path_name: Path): """ :return: """ Key = f"six/{key}" response = cls.client.upload_file( Bucket=cls.Bucket, # Bucket: 指定存储桶的名称,这里是 "six-1320557642" Key=Key, # Key: 指定文件在存储桶中的路径和名称,这里是 'six/img.jpg' LocalFilePath=path_name, # LocalFilePath: 指定本地要上传的文件路径,这里是 "img.jpg" EnableMD5=False, # EnableMD5: 是否启用 MD5 校验,False 表示不启用 progress_callback=None, # progress_callback: 上传进度回调函数,None 表示不使用回调函数 ) cls.批量查询图片链接(Key=Key) @classmethod def 批量查询图片链接(cls, Key): """ :return: """ url = cls.client.get_object_url(Bucket=cls.Bucket, Key=Key, ) data = {"type": "image", "src": url, } return data @classmethod def 处理用户头像(cls, content: bytes, name: str): """""" image = io.BytesIO(content) Key = f"six/app应用/用户头像/{name}.png" print(Key) response = cls.client.upload_file_from_buffer(Bucket=cls.Bucket, Key=Key, Body=image, ) # Body: 文件的 bytes 类型数据 必须要是一个可以调用read()方法的对象 img_response = cls.批量查询图片链接(Key=Key) src = jmespath.search(data=img_response, expression="src", ) return src @classmethod def 删除图片(cls): data = cls.client.delete_object(Bucket=cls.Bucket, Key="六果项目/app/加.png") print(data) @classmethod def xiaozizi(cls): data = cls.client.delete_object(Bucket=cls.Bucket, Key="zizi/") print(data) @classmethod def 删除目录(cls): pass data_img_list = cls.client.list_objects(Bucket=cls.Bucket, Prefix="zizi", ) # 从icon这个目录中, 获取所有的 子元素(图片) 信息 Contents = jmespath.search(data=data_img_list, expression="Contents") # 取出所有的图片 信息 for img in Contents: # 循环, 操作 Key = jmespath.search(data=img, expression="Key") print(Key) # 删除 res = cls.client.delete_object(Bucket=cls.Bucket, Key=Key) print(res) @classmethod def 查询所有的图片(cls): pass data = cls.client.list_objects(Bucket=cls.Bucket, Prefix="元宝零售", ) print(data) Contents = jmespath.search(data=data, expression="Contents") for img in Contents: Key = jmespath.search(data=img, expression="Key") print(Key) if __name__ == "__main__": pass fileImg = Path("../django_static_directory/media/扫描 4.png").resolve() print(fileImg) print(fileImg.name) # default_storage.save(name=fileImg.name, content=fileImg.open(mode="rb")) fileImgFile = open(file=fileImg, mode="rb") # oss上传腾讯云图片.删除图片() # print(oss上传腾讯云图片.上传图片(key=f"/demo/{fileImg.name}", file=fileImg.open(mode="rb")), )