我想要实现的是将 Box 中的文件直接下载到我的 COS 存储桶中,而无需将其下载到我的本地计算机。我想在 IBM Cloud Functions 中运行此代码,因此我需要以某种方式建立此直接下载。
def main(args):
config = JWTAuth.from_settings_file('test_config.json')
client = Client(config)
print(client.user('me').get())
#set the path to folder
folderId = "131511144823"
#filename we need
file_we_looking_for = "test.xls"
files_to_download = {}
#get all items in box folder
items_in_folder = client.folder(folder_id=folderId).get_items()
for item in items_in_folder:
if file_we_looking_for == item.name:
print(item.name)
files_to_download[item.id] = item.name
#upload the file straight to object storage
cos_client_conn = get_cos_client_connection()
upload_large_file(cos_client_conn,'test','exceltestfrombox', files_to_download.keys()[0])
def upload_large_file(cos_cli, bucket_name, item_name, file_path):
print("Starting large file upload for {0} to bucket: {1}".format(item_name, bucket_name))
# set the chunk size to 5 MB
part_size = 1024 * 1024 * 5
# set threadhold to 5 MB
file_threshold = 1024 * 1024 * 5
# set the transfer threshold and chunk size in config settings
transfer_config = ibm_boto3.s3.transfer.TransferConfig(
multipart_threshold=file_threshold,
multipart_chunksize=part_size
)
# create transfer manager
transfer_mgr = ibm_boto3.s3.transfer.TransferManager(cos_cli, config=transfer_config)
try:
# initiate file upload
future = transfer_mgr.upload(file_path, bucket_name, item_name)
# wait for upload to complete
future.result()
print ("Large file upload complete!")
except Exception as e:
print("Unable to complete large file upload: {0}".format(e))
finally:
transfer_mgr.shutdown()
问题是upload_large_file函数正在寻找下载到我的计算机的文件的绝对路径。我还尝试生成文件的共享链接并将其粘贴到那里,但它不起作用。