使用Python上传文件到阿里云oss

创建用户

创建完成后,先将AccessKey ID 和AccessKey Secret保存下来,否则后面找不到

设置权限

给用户添加AliyunOSSFullAccess权限

创建Bucket

在导航栏的搜索框中搜索oss,进入oss控制台,点击创建Bucket

创建时,区域选择后,最好先记下红框中的内容,后面要用到

代码

官方文档

环境:Python >= 3.8

bash 复制代码
pip install alibabacloud-oss-v2
python 复制代码
import alibabacloud_oss_v2 as oss

class MyConfig:
    access_key_id = "LTAI5t5ampc6a2kw9s2163kT" # AccessKey ID
    access_key_secret = "Q3OvDaFiV7AXbdMZRXAYEX3AWKOvQb" # AccessKey Secret
    # 地域 ID,根据创建bucket时所选区域从表格中查找
    # 表格 https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints?spm=a2c4g.11186623.0.0.24d149bf7HpEjp#concept-zt4-cvy-5db
    region = "cn-beijing"
    # endpoint与区域对应
    endpoint = "https://oss-cn-beijing.aliyuncs.com"
    bucket = "test-cry" # bucket名称
    key = "1.png" # 上传到bucket后的文件名
    file_path = "C:\\Users\\10239\\Pictures\\1.png" # 上传的文件路径

def main():
    # 使用静态凭证
    credentials_provider = oss.credentials.StaticCredentialsProvider(MyConfig.access_key_id, MyConfig.access_key_secret)

    # 加载SDK的默认配置,并设置凭证提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # 设置配置中的区域信息
    cfg.region = MyConfig.region
    # 如果提供了endpoint参数,则设置配置中的endpoint
    if MyConfig.endpoint is not None:
        cfg.endpoint = MyConfig.endpoint

    # 使用配置好的信息创建OSS客户端
    client = oss.Client(cfg)

    # 定义一个字典变量 progress_state 用于保存上传进度状态,初始值为 0
    progress_state = {'saved': 0}
    def _progress_fn(n, written, total):
        # 使用字典存储累计写入的字节数,避免使用 global 变量
        progress_state['saved'] += n

        # 计算当前上传百分比,将已写入字节数与总字节数进行除法运算后取整
        rate = int(100 * (float(written) / float(total)))

        # 打印当前上传进度,\r 表示回到行首,实现命令行中实时刷新效果
        # end='' 表示不换行,使下一次打印覆盖当前行
        print(f'\r上传进度:{rate}% ', end='')

    # 执行上传对象的请求,指定存储空间名称、对象名称和数据内容
    result = client.put_object_from_file(oss.PutObjectRequest(
            bucket=MyConfig.bucket,
            key=MyConfig.key,
            progress_fn=_progress_fn,
        ),
        MyConfig.file_path, # 指定本地文件路径
    )

    # 输出请求的结果状态码、请求ID、内容MD5、ETag、CRC64校验码和版本ID,用于检查请求是否成功
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
    )

if __name__ == "__main__":
    main()  # 脚本入口,当文件被直接运行时调用main函数

运行后,到bucket中查看文件