|
| 1 | +# Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. |
| 2 | + |
| 3 | +from __future__ import print_function |
| 4 | +import os |
| 5 | +import oraclebmc |
| 6 | +from oraclebmc.object_storage import UploadManager |
| 7 | +from oraclebmc.object_storage.models import CreateBucketDetails |
| 8 | +from oraclebmc.object_storage.transfer.constants import MEBIBYTE |
| 9 | + |
| 10 | + |
| 11 | +def progress_callback(bytes_uploaded): |
| 12 | + print("{} additional bytes uploaded".format(bytes_uploaded)) |
| 13 | + |
| 14 | + |
| 15 | +config = oraclebmc.config.from_file() |
| 16 | +compartment_id = config["tenancy"] |
| 17 | +object_storage = oraclebmc.object_storage.ObjectStorageClient(config) |
| 18 | + |
| 19 | +namespace = object_storage.get_namespace().data |
| 20 | +bucket_name = "python-sdk-example-bucket" |
| 21 | +object_name = "python-sdk-example-object" |
| 22 | + |
| 23 | +print("Creating a new bucket {!r} in compartment {!r}".format(bucket_name, compartment_id)) |
| 24 | +request = CreateBucketDetails() |
| 25 | +request.compartment_id = compartment_id |
| 26 | +request.name = bucket_name |
| 27 | +bucket = object_storage.create_bucket(namespace, request) |
| 28 | + |
| 29 | +# create example file to upload |
| 30 | +filename = 'multipart_object_content.txt' |
| 31 | +file_size_in_mebibytes = 10 |
| 32 | +sample_content = b'a' |
| 33 | +with open(filename, 'wb') as f: |
| 34 | + while f.tell() < MEBIBYTE * file_size_in_mebibytes: |
| 35 | + f.write(sample_content * MEBIBYTE) |
| 36 | + |
| 37 | +print("Uploading new object {!r}".format(object_name)) |
| 38 | + |
| 39 | +# upload manager will automatically use mutlipart uploads if the part size is less than the file size |
| 40 | +part_size = 2 * MEBIBYTE # part size (in bytes) |
| 41 | +upload_manager = UploadManager(object_storage, allow_parallel_uploads=True, parallel_process_count=3) |
| 42 | +response = upload_manager.upload_file( |
| 43 | + namespace, bucket_name, object_name, filename, part_size=part_size, progress_callback=progress_callback) |
| 44 | + |
| 45 | +# To force single part uploads, set "allow_multipart_uploads=False" when creating the UploadManager. |
| 46 | +# upload_manager = UploadManager(object_storage, allow_multipart_uploads=False) |
| 47 | +# response = upload_manager.upload_file( |
| 48 | +# namespace, bucket_name, object_name, filename, part_size=part_size, progress_callback=progress_callback) |
| 49 | + |
| 50 | +# remove file to clean up |
| 51 | +os.remove(filename) |
| 52 | + |
| 53 | +print("Deleting object {}".format(object_name)) |
| 54 | +object_storage.delete_object(namespace, bucket_name, object_name) |
| 55 | + |
| 56 | +print("Deleting bucket {}".format(bucket_name)) |
| 57 | +object_storage.delete_bucket(namespace, bucket_name) |
0 commit comments