• 阿里云OSS简单应用


    前提条件

            购买OSS标准存储包之后,就可以使用OSS的各种服务了

    1 获取自己的OSS Endpoint

    OSS访问域名和数据中心_对象存储(OSS)-阿里云帮助中心

    在官方的表格上找到自己OSS标准存储包对应的外网Endpoint即可

    2 创建自己的阿里云Access Key ID 和 Access Key Secret

    1. 首先,登录到阿里云开发者平台的控制台
    2. 然后鼠标对准自己的头像
    3. 这个时候会出现一个悬浮窗口
    4. 悬浮窗口内有一个叫做Acess Key管理的按钮
    5. 点下去
    6. 然后就能创建好自己的Access Key 和 Access Key Secret了
    7. 一定要备份和记住自己的Access Key 和 Access Key Secret

    3 存储空间名称(Bucket Name)

    1. 打开对象存储 OSS
    2. 打开Bucket 列表
    3. 就能看到自己的Bucket名称

    存储桶域名(Bucket Domain)

    1. 打开对象存储 OSS
    2. 打开Bucket 列表
    3. 打开概览
    4. 查看访问端口
    5. 查看外网访问
    6. 查看是否支持HTTPS
    7. 查看Bucket 域名
    8. 结果如:https://xxx.oss-ap-southeast-1.aliyuncs.com

    5 简单上传

    1. # -*- coding: utf-8 -*-
    2. import oss2
    3. import os
    4. from oss2.credentials import EnvironmentVariableCredentialsProvider
    5. # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    6. auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
    7. # yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    8. # 填写Bucket名称。
    9. bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
    10. # 必须以二进制的方式打开文件。
    11. # 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
    12. with open('D:\\localpath\\examplefile.txt', 'rb') as fileobj:
    13. # Seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传,直到文件结束。
    14. fileobj.seek(1000, os.SEEK_SET)
    15. # Tell方法用于返回当前位置。
    16. current = fileobj.tell()
    17. # 填写Object完整路径。Object完整路径中不能包含Bucket名称。
    18. bucket.put_object('exampleobject.txt', fileobj)

    6 上传回调

    1. # -*- coding: utf-8 -*-
    2. import json
    3. import base64
    4. import oss2
    5. from oss2.credentials import EnvironmentVariableCredentialsProvider
    6. # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    7. auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
    8. # yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    9. # 填写Bucket名称。
    10. bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
    11. # 定义回调参数Base64编码函数。
    12. def encode_callback(callback_params):
    13. cb_str = json.dumps(callback_params).strip()
    14. return oss2.compat.to_string(base64.b64encode(oss2.compat.to_bytes(cb_str)))
    15. # 设置上传回调参数。
    16. callback_params = {}
    17. # 设置回调请求的服务器地址,例如http://oss-demo.aliyuncs.com:23450。
    18. callback_params['callbackUrl'] = 'http://oss-demo.aliyuncs.com:23450'
    19. #(可选)设置回调请求消息头中Host的值,即您的服务器配置Host的值。
    20. #callback_params['callbackHost'] = 'yourCallbackHost'
    21. # 设置发起回调时请求body的值。
    22. callback_params['callbackBody'] = 'bucket=${bucket}&object=${object}'
    23. # 设置发起回调请求的Content-Type。
    24. callback_params['callbackBodyType'] = 'application/x-www-form-urlencoded'
    25. encoded_callback = encode_callback(callback_params)
    26. # 设置发起回调请求的自定义参数,由Key和Value组成,Key必须以x:开始。
    27. callback_var_params = {'x:my_var1': 'my_val1', 'x:my_var2': 'my_val2'}
    28. encoded_callback_var = encode_callback(callback_var_params)
    29. # 上传回调。
    30. params = {'x-oss-callback': encoded_callback, 'x-oss-callback-var': encoded_callback_var}
    31. # 填写Object完整路径和字符串。Object完整路径中不能包含Bucket名称。
    32. result = bucket.put_object('examplefiles/exampleobject.txt', 'a'*1024*1024, params)

    7 上传进度条

    1. # -*- coding: utf-8 -*-
    2. from __future__ import print_function
    3. import os, sys
    4. import oss2
    5. from oss2.credentials import EnvironmentVariableCredentialsProvider
    6. # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    7. auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
    8. # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    9. # yourBucketName填写存储空间名称。
    10. bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')
    11. # consumed_bytes表示已上传的数据量。
    12. # total_bytes表示待上传的总数据量。当无法确定待上传的数据长度时,total_bytes的值为None。
    13. def percentage(consumed_bytes, total_bytes):
    14. if total_bytes:
    15. rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
    16. print('\r{0}% '.format(rate), end='')
    17. sys.stdout.flush()
    18. # progress_callback为可选参数,用于实现进度条功能。
    19. bucket.put_object('yourObjectName', 'a'*1024*1024, progress_callback=percentage)

    8 融合上传、回调、进度条

    1. import json
    2. import base64
    3. import oss2
    4. from oss_bucket import get_bucket
    5. import sys
    6. # 定义回调参数Base64编码函数。
    7. def encode_callback(callback_params):
    8. cb_str = json.dumps(callback_params).strip()
    9. return oss2.compat.to_string(base64.b64encode(oss2.compat.to_bytes(cb_str)))
    10. def prepare_callback_params():
    11. # 设置上传回调参数。
    12. callback_params = {
    13. 'callbackUrl': 'http://oss-demo.aliyuncs.com:23450',
    14. 'callbackBody': 'bucket=${bucket}&object=${object}',
    15. 'callbackBodyType': 'application/x-www-form-urlencoded'
    16. }
    17. encoded_callback = encode_callback(callback_params)
    18. # 设置发起回调请求的自定义参数,由Key和Value组成,Key必须以x:开始。
    19. callback_var_params = {'x:my_var1': 'my_val1', 'x:my_var2': 'my_val2'}
    20. encoded_callback_var = encode_callback(callback_var_params)
    21. return {'x-oss-callback': encoded_callback, 'x-oss-callback-var': encoded_callback_var}
    22. def percentage(consumed_bytes, total_bytes):
    23. if total_bytes:
    24. rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
    25. print('\r{0}% '.format(rate), end='')
    26. sys.stdout.flush()
    27. if __name__ == '__main__':
    28. # 上传回调。
    29. params = prepare_callback_params()
    30. bucket = get_bucket()
    31. object_name = 'examplefiles/exampleobject.txt'
    32. try:
    33. # 填写Object完整路径和字符串。Object完整路径中不能包含Bucket名称。
    34. result = bucket.put_object(object_name, 'a' * 1024 * 1024, params, progress_callback=percentage)
    35. print("\nUpload successful!")
    36. print(f"Result:{result}")
    37. print(f"bucket.bucket_name:{bucket.bucket_name}")
    38. print(f"bucket.endpointL:{bucket.endpoint}")
    39. print(f"object_name:{object_name}")
    40. file_url = f"https://{bucket.bucket_name}.{bucket.endpoint.replace('https://', '')}/{object_name}"
    41. print(f"File URL: {file_url}")
    42. except oss2.exceptions.RequestError as e:
    43. print(f"Request error: {e}")
    44. except oss2.exceptions.ServerError as e:
    45. print(f"Server error: {e}")
    46. except oss2.exceptions.NoSuchBucket as e:
    47. print(f"No such bucket: {e}")
    48. except Exception as e:
    49. print(f"Unexpected error: {e}")

  • 相关阅读:
    SimpleITK使用——4. 奇怪的问题
    Unity中Shader的Lambert光照的实现
    RabbitMQ-简述
    基础会计学知识点汇总
    #机器学习--补充数学基础--概率论
    Linux学习-60-date、tr命令
    济南国家高新技术企业认定评审要点
    Code For Better 谷歌开发者之声——我与Android同成长
    Centos7 配置 DNS服务器
    自己做网站需要考虑的问题
  • 原文地址:https://blog.csdn.net/weixin_47420447/article/details/140465610