from tos import DataTransferType
from tos.utils import SizeAdapter, MergeProcess
ak = os.getenv('TOS_ACCESS_KEY')
sk = os.getenv('TOS_SECRET_KEY')
endpoint = "your endpoint"
bucket_name = "bucket-test"
object_key = "object-test"
file_name = '/usr/local/testfile.txt'
total_size = os.path.getsize(file_name)
part_size = 5 * 1024 * 1024
client = tos.TosClientV2(ak, sk, endpoint, region)
def percentage(consumed_bytes: int, total_bytes: int, rw_once_bytes: int, type: DataTransferType):
rate = int(100 * float(consumed_bytes) / float(total_bytes))
print("rate:{}, consumed_bytes:{},total_bytes{}, rw_once_bytes:{}, type:{}".format(rate, consumed_bytes,
data_transfer_listener = MergeProcess(percentage, total_size, (total_size + part_size - 1) // part_size, 0)
multi_result = client.create_multipart_upload(bucket_name, object_key, acl=tos.ACLType.ACL_Public_Read,
storage_class=tos.StorageClassType.Storage_Class_Standard)
upload_id = multi_result.upload_id
with open(file_name, 'rb') as f:
while offset < total_size:
num_to_upload = min(part_size, total_size - offset)
out = client.upload_part(bucket_name, object_key, upload_id, part_number,
content=SizeAdapter(f, num_to_upload, init_offset=offset),
data_transfer_listener=data_transfer_listener)
client.complete_multipart_upload(bucket_name, object_key, upload_id, parts)
except tos.exceptions.TosClientError as e:
print('fail with client error, message:{}, cause: {}'.format(e.message, e.cause))
except tos.exceptions.TosServerError as e:
print('fail with server error, code: {}'.format(e.code))
print('error with request id: {}'.format(e.request_id))
print('error with message: {}'.format(e.message))
print('error with http code: {}'.format(e.status_code))
print('error with ec: {}'.format(e.ec))
print('error with request url: {}'.format(e.request_url))
print('fail with unknown error: {}'.format(e))