IBM COS S3 Transfer Manager

2.16.1 · active · verified Sun Apr 12

The `ibm-cos-sdk-s3transfer` library provides a high-level, multi-part, multi-threaded Amazon S3-like transfer manager optimized for IBM Cloud Object Storage (COS). It handles efficient uploading and downloading of files, especially large objects, managing part sizing and concurrency. It is currently at version 2.16.1 and receives regular updates, typically with minor feature releases every few months and patch releases for bug fixes.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to initialize the IBM COS client and then use the `TransferManager` to upload and download a file. It expects IBM COS credentials and bucket name to be set as environment variables.

import os
import ibm_cos_sdk
from ibm_cos_sdk.s3.transfer import TransferManager

# Configure IBM COS credentials and endpoint
# Ensure these environment variables are set:
# IBM_COS_ENDPOINT, IBM_COS_API_KEY_ID, IBM_COS_SERVICE_INSTANCE_ID, IBM_COS_BUCKET

ENDPOINT = os.environ.get('IBM_COS_ENDPOINT', 'https://s3.us.cloud-object-storage.appdomain.cloud')
API_KEY_ID = os.environ.get('IBM_COS_API_KEY_ID', '')
SERVICE_INSTANCE_ID = os.environ.get('IBM_COS_SERVICE_INSTANCE_ID', '')
BUCKET_NAME = os.environ.get('IBM_COS_BUCKET', 'my-test-bucket')

if not all([API_KEY_ID, SERVICE_INSTANCE_ID, BUCKET_NAME]):
    print("Error: IBM COS environment variables not set. Please set IBM_COS_API_KEY_ID, IBM_COS_SERVICE_INSTANCE_ID, IBM_COS_BUCKET.")
    exit(1)

# Initialize COS client
cos_client = ibm_cos_sdk.client(
    's3',
    ibm_api_key_id=API_KEY_ID,
    ibm_service_instance_id=SERVICE_INSTANCE_ID,
    config=ibm_cos_sdk.config.Config(signature_version='oauth'),
    endpoint_url=ENDPOINT
)

# Create a TransferManager instance
transfer_manager = TransferManager(cos_client)

# --- Example: Upload a file ---
local_file_path = 'local_file.txt'
key_name = 'remote_object.txt'

# Create a dummy local file for upload
with open(local_file_path, 'w') as f:
    f.write('Hello, IBM COS Transfer Manager!')

print(f"Uploading {local_file_path} to {BUCKET_NAME}/{key_name}...")

try:
    future = transfer_manager.upload(local_file_path, BUCKET_NAME, key_name)
    future.result()  # Wait for the transfer to complete
    print(f"Successfully uploaded {key_name}")
except Exception as e:
    print(f"Upload failed: {e}")

# --- Example: Download a file ---
download_path = 'downloaded_file.txt'

print(f"Downloading {BUCKET_NAME}/{key_name} to {download_path}...")

try:
    future = transfer_manager.download(BUCKET_NAME, key_name, download_path)
    future.result() # Wait for the transfer to complete
    print(f"Successfully downloaded {key_name} to {download_path}")
except Exception as e:
    print(f"Download failed: {e}")

# Clean up local files (optional)
os.remove(local_file_path)
os.remove(download_path)

# You can also close the transfer manager (optional)
transfer_manager.shutdown()

view raw JSON →