• 阿里云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}")

  • 相关阅读:
    SpringBoot集成Mybatis-Plus
    Linux系统及Docker安装RabbitMq
    list类型常用命令及其底层数据结构
    【LeetCode每日一题】【单调栈】2022-10-21 901. 股票价格跨度 Java实现
    智能语音之远场关键词识别实践(一)
    labview编程笔记之循环结构
    如何保证 HTTPS 证书的有效性?
    MindSpore 1.0.0 模型训练报错
    前端网页截图/裁剪 导出网页指定区域为图片(支持导出展示内容自定义)
    【JavaScript 进阶教程】字符串新增方法 trim() 的说明与使用
  • 原文地址:https://blog.csdn.net/weixin_47420447/article/details/140465610