How Do I Specify Content-SHA256? (SDK for Python)
The x-obs-content-sha256 header can be carried during object or part upload.
The value of this header is a hexadecimal representation of the SHA-256 value of the request body calculated using Hex(SHA256Hash(<payload>). The server verifies the calculated value for integrity check. This might affect the performance but is still recommended for security purposes.
The code example for object upload is as follows:
# -*- coding:utf-8 -*- # This example uploads a file with content-sha256 specified. from obs import ObsClient import os import traceback import hashlib # Obtain an AK and SK pair using environment variables or import the AK and SK pair in other ways. Using hard coding may result in leakage. # Obtain an AK and SK pair from the management console by referring to https://support.huaweicloud.com/intl/en-us/usermanual-ca/ca_01_0003.html. ak = os.getenv("AccessKeyID") sk = os.getenv("SecretAccessKey") # (Optional) If you use a temporary AK and SK pair and a security token to access OBS, obtain them from environment variables. security_token = os.getenv("SecurityToken") # Set server to the endpoint corresponding to the bucket. CN-Hong Kong is used here as an example. Replace it with the one currently in use. server = "https://obs.ap-southeast-1.myhuaweicloud.com" # Calculate SHA256 of the file. def getSha256(file_path): # Read the file content in binary mode. with open(file_path, 'rb') as f: # Create an SHA256 hash object. sha256_hash = hashlib.sha256() # Read the file content cyclically and update the hash value. while True: data = f.read(65536) # Read 64 KB each time. if not data: break sha256_hash.update(data) # Return the hexadecimal representation of the hash value. sha256 = sha256_hash.hexdigest() f.close() return sha256 # Create an obsClient instance. # If you use a temporary AK and SK pair and a security token to access OBS, you must specify security_token when creating an instance. obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server) bucketName = 'examplebucket' objectKey = 'example/objectname1' file_path = 'D:\\example.txt' # Specify the user-defined header. extensionHeaders = {'x-obs-content-sha256': getSha256(file_path)} try: # Upload a file. resp = obsClient.putFile(bucketName, objectKey, file_path, extensionHeaders=extensionHeaders) # If status code 2xx is returned, the API is called successfully. Otherwise, the API call fails. 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 supports both MD5 and SHA256 for integrity check, though SHA256 is recommended for higher security.
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot