python 阿里云oss实现直传签名与回调验证的示例方法

yizhihongxing

下面就是对于“python 阿里云oss实现直传签名与回调验证的示例方法”的详细讲解。

什么是阿里云OSS

阿里云对象存储OSS(Object Storage Service)是一种海量、安全、低成本、高可靠的云存储服务,能够让用户随时随地存储和调用任意类型的数据,如图片、音频、视频、文档等。在开发中,我们通常会将一些大型文件(如图片、视频等)存储到阿里云OSS中,并通过签名实现上传和下载等操作。

直传签名

在阿里云OSS中,使用直传签名的方式可以直接将文件从本地上传到OSS,并且不经过服务器,从而减少了服务端的流量和存储压力。使用直传签名实现上传文件的步骤如下:

  1. 请求上传地址和签名信息

    首先,客户端向服务端请求获得上传所需参数的接口(GetSignatureUrl),其中包括:bucket、object、accessid、host、policy、signature参数和自定义的callbackUrl和callbackBody参数。其中,policy是将要上传文件的过期时间和上传策略的一个 JSON 格式字符串,signature是针对 policy 按照上传时的 Access Key 计算出的签名。

  2. 返回上传地址和签名信息

    服务端获取到以上信息后,返回上传地址和签名信息给客户端。

  3. 客户端直接上传

    客户端根据获取到的参数直接把需要上传的文件 POST 到上传地址中,同时需要按照签名要求添加相应的 Header 信息。

回调验证

在文件上传完成之后,服务端需要对上传完成回调进行校验,以保证上传的文件的完整性和真实性。回调验证的步骤如下:

  1. 客户端完成上传并发送回调信息

    客户端完成上传之后,会通过指定的 callbackUrl,把上传完成的回调信息 POST 到服务端。

  2. 验证回调信息

    服务端需要对接收到的回调信息进行验证,主要包括以下内容:

    • 自定义 callbackBody 中携带的参数与实际情况是否一致
    • 自定义 callbackBody 中指定的文件是否存在
    • 自定义 callbackBody 中指定的文件的 MD5 判断是否匹配

    如果验证通过,则认为上传完成的回调信息合法有效。

python代码示例

下面是使用 Python 语言实现阿里云 OSS 直传签名与回调验证的示例代码:

import json
import base64
import hmac
import hashlib

def get_signature(policy, access_key_secret):
    """
    获取上传签名
    """
    policy_str = json.dumps(policy).replace('\n', '').replace('\r', '')
    policy_encode = base64.b64encode(policy).rstrip('=').decode('utf-8')
    h = hmac.new(access_key_secret.encode('utf-8'), policy_encode.encode('utf-8'), hashlib.sha1)
    signature = base64.encodebytes(h.digest()).strip().decode('utf-8')
    return policy_encode, signature

def validate_callback(callback_body, access_key_secret):
    """
    校验回调信息
    """
    callback_json = json.loads(callback_body)
    if callback_json.get('event') != 'ObjectCreated:Put':
        return False

    bucket_name = callback_json.get('bucket').get('name')
    object_key = callback_json.get('object').get('key')

    # 根据 callbackJson 中的 bucket_name 和 object_key 获取文件内容
    # 检查文件的 MD5 是否和 callback_json 中的 md5 匹配
    # 如果一致,则认为回调信息合法有效

    return True

以上就是关于“python 阿里云oss实现直传签名与回调验证的示例方法”的完整攻略,希望能够对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 阿里云oss实现直传签名与回调验证的示例方法 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 解决Python报错:SyntaxError: invalid character ‘,‘ (U+FF0C)

    当Python代码中出现“SyntaxError: invalid character“,”(U+FF0C)”时,这通常是因为代码中包含了中文字符的写法错误所造成的。该错误表示Python编译器无法识别该字符,并且它可能导致代码中断或执行出现错误。以下是一些可能有用的方法来解决这个问题。 1. 修改代码文件编码格式 在代码文件的头部,添加以下注释,告诉Pyt…

    python 2023年5月13日
    00
  • Python – gphoto2:如何将输出转换为 JSON 或 python 数组

    【问题标题】:Python – gphoto2: how to convert output to JSON or python arrayPython – gphoto2:如何将输出转换为 JSON 或 python 数组 【发布时间】:2023-04-01 03:20:01 【问题描述】: 我正在使用 gphoto2,大多数命令都在工作,但我不知道如何使…

    Python开发 2023年4月8日
    00
  • Python中list列表的赋值方法及遇到问题处理

    在Python中,列表是一种常用的数据类型,可以存储多个元素。本文将详细讲解Python中list列表的赋值方法及遇到问题处理,包括浅拷贝和深拷贝区别、如何避免浅拷贝带来的问题以及如何使用()函数进行深拷贝。并提供两个实例说明。 浅拷贝和深拷贝的区别 在Python中,赋值操作会创建新的对象,并将其引用赋值给变量。对于列表来说,赋值操作会创建一个新的列表对象…

    python 2023年5月13日
    00
  • 一篇文章彻底搞懂python正则表达式

    一篇文章彻底搞懂Python正则表达式 正则表达式是一种用于描述字符串模式的语言,可以用于匹配、查找、替换和分割字符串。在Python中,我们可以使用re模块来使用正则表达式。本文将详细介绍Python中正则表达式的语法、字符集、转义字符以及常用函数,并提供两个示例说明。 基本语法 正则表达式由普通字符和元字符组成,普通字符表示它本身,而元字符则有特殊的含义…

    python 2023年5月14日
    00
  • 利用Python绘制数据的瀑布图的教程

    以下是利用Python绘制数据的瀑布图的教程攻略: 什么是瀑布图 瀑布图(Waterfall chart)又称为桥形图,它适用于展示某一目标从初始数值一步步地增加或减少到最终数值的整个过程,是一种不常用的图表类型。 利用Python绘制瀑布图的步骤 绘制瀑布图的第一步是导入必要的库,包括pandas,matplotlib和numpy。接下来是读取数据并对其进…

    python 2023年5月19日
    00
  • 详解python多线程、锁、event事件机制的简单使用

    关于“详解python多线程、锁、event事件机制的简单使用”的攻略,我准备分成以下几个部分进行讲解: 多线程概述 多线程实现方法 线程锁的概念及使用方法 Event(事件)机制的简介及使用方法 示例说明 1. 多线程概述 多线程是指程序运行时创建了多个线程并发执行的方式,它可以有效提高程序运行效率,提高CPU利用率和操作系统的响应速度。 2. 多线程实现…

    python 2023年5月18日
    00
  • python 调用Google翻译接口的方法

    以下是关于“Python 调用Google翻译接口的方法”的完整攻略。 1. 申请 Google 翻译 API 在开始调用 Google 翻译 API 之前,需要先申请 Google 翻译 API 的服务密钥。 具体步骤可参考:申请 Google 翻译 API 及生成服务密钥 2. 安装 googletrans 库 由于 Google 翻译 API 并不是 …

    python 2023年6月3日
    00
  • Python安装模块的常见问题及解决方法

    Python安装模块的常见问题及解决方法 在使用Python编程过程中,我们经常需要用到第三方模块。Python模块的安装一般可以通过pip进行,但是在安装过程中可能会遇到一些问题,下面将列出一些常见的问题及其解决方法。 问题一:pip无法连接到远程网站 这个问题的原因通常是由于网络连接问题。如果您的网络连接良好但仍然无法使用pip,请考虑添加一些额外的pi…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部