华为云对象存储OBS如何指定Content-SHA256?_云淘科技

上传对象和上传段支持携带x-obs-content-sha256头域,该头域值为请求消息体256-bit SHA256值转十六进制值,计算方式为Hex(SHA256Hash(),服务端会对携带此头域的请求计算其消息体的sha256值做校验(性能会有部分下降,在安全上推荐该算法),上传对象示例代码如下:

# -*- coding:utf-8 -*-
# 本示例用于上传文件D:\example.txt到examplebucket桶中的example/objectname,并指定content-sha256头域。
from obs import ObsClient
import os
import traceback
import hashlib
# 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险
# 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
ak = os.getenv("AccessKeyID")
sk = os.getenv("SecretAccessKey")
# 【可选】如果使用临时AKSK和SecurityToken访问OBS,则同样推荐通过环境变量获取
security_token = os.getenv("SecurityToken")
# server填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。
server = "https://obs.cn-north-4.myhuaweicloud.com"
# 计算文件sha256
def getSha256(file_path):
    # 以二进制方式读取文件内容
    with open(file_path, 'rb') as f:
        # 创建SHA256哈希对象
        sha256_hash = hashlib.sha256()
        # 循环读取文件内容并更新哈希值
        while True:
            data = f.read(65536)  # 每次读取64KB
            if not data:
                break
            sha256_hash.update(data)
    # 返回哈希值的十六进制表示
    sha256 = sha256_hash.hexdigest()
    f.close()
    return sha256
# 创建obsClient实例
# 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过security_token参数指定securityToken值
obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
bucketName = 'examplebucket'
objectKey = 'example/objectname1'
file_path = 'D:\example.txt'
# 自定义头域
extensionHeaders = {'x-obs-content-sha256': getSha256(file_path)}
try:
    # 上传文件
    resp = obsClient.putFile(bucketName, objectKey, file_path, extensionHeaders=extensionHeaders)
    # 返回码为2xx时,接口调用成功,否则接口调用失败
    if resp.status < 300:
        print('Put File Succeeded')
        print('requestId:', resp.requestId)
        print('etag:', resp.body.etag)
        print('versionId:', resp.body.versionId)
    else:
        print('Put File Failed')
        print('requestId:', resp.requestId)
        print('errorCode:', resp.errorCode)
        print('errorMessage:', resp.errorMessage)
except:
    print(traceback.format_exc())

Python sdk 同时支持MD5与SHA256校验,在安全上更推荐使用SHA256算法

父主题: 常见问题

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家