In synchronous processing, a program must finish the current task before it can begin executing any additional tasks. To synchronously process data in Object Storage Service (OSS), you can use the x-oss-process parameter. This topic describes how to use OSS SDK for Python V2 in synchronous processing scenarios, such as image processing and document processing.
Usage notes
The sample code in this topic uses the China (Hangzhou) region (
cn-hangzhou) as an example. By default, the public endpoint is used. If you access OSS from another Alibaba Cloud service in the same region, use an internal endpoint. For more information about the mappings between OSS regions and endpoints, see Regions and endpoints.
Method definition
process_object(request: ProcessObjectRequest, **kwargs) → ProcessObjectResultRequest parameters
Parameter | Type | Description |
request | ProcessObjectRequest | The request parameter. For more information, see ProcessObjectRequest. |
Response parameters
Type | Description |
ProcessObjectResult | The return value. For more information, see ProcessObjectResult. |
For the complete method definition, see process_object.
Sample code
The following sample code resizes an image and stores the resized image to the specified bucket using OSS SDK for Python V2:
import base64
import argparse
import alibabacloud_oss_v2 as oss
# Create a parser for parsing command-line arguments and describe the purpose of the script.
parser = argparse.ArgumentParser(description="process object sample")
# Specify command-line arguments, including the required region, source bucket name, endpoint, and source object name, style, destination object name, and destination bucket name.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--key', help='The name of the object.', required=True)
parser.add_argument('--style', help='The style to apply for processing the object, such as image resizing.', required=True)
parser.add_argument('--target_image', help='Specify the name of the processed image.', required=True)
parser.add_argument('--target_bucket', help='Specify the name of the bucket used to store processed images.', required=True)
def main():
# Parse command-line arguments.
args = parser.parse_args()
# Obtain access credentials from environment variables for authentication.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Use the default configuration to create a cfg object and specify the credential provider.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Set the region attribute of the cfg object to the region provided in the command line.
cfg.region = args.region
# If a custom endpoint is provided, update the endpoint attribute of the cfg object with the provided endpoint.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Use the preceding settings to initialize the OSSClient instance.
client = oss.Client(cfg)
# Get the style for processing objects.
# The following sample style resizes an image: style = 'image/resize,m_fixed,w_100,h_100'
style = args.style
# Base64-encode the destination bucket name and object name to make them URL-safe.
target_bucket_base64 = base64.b64encode(args.target_bucket.encode()).decode()
target_key_base64 = base64.b64encode(args.target_image.encode()).decode()
# Create a process instruction that includes the style and destination bucket name.
process = f"{style}|sys/saveas,o_{target_key_base64},b_{target_bucket_base64}"
# Send the request to process the object and store the resulting object in the destination bucket.
result = client.process_object(oss.ProcessObjectRequest(
bucket=args.bucket, # The source bucket name.
key=args.key, # The source object name.
process=process, # The processing instruction.
))
# Display the status code and other result information to check the request status and result.
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' bucket: {result.bucket},'
f' file size: {result.file_size},'
f' key: {result.key},'
f' process status: {result.process_status},'
)
# Call the main function to start the processing logic when the script is directly run.
if __name__ == "__main__":
main() # Specify the entry point of the script. The control flow starts here.Common scenarios
Add a blind watermark to an image
References
For more information, see Synchronous Processing.
For a complete code example of the synchronous processing feature, see process_object.py.