Могу ли я напрямую загружать файлы из Box в хранилище объектов IBM Cloud?

#python #ibm-cloud #box #ibm-cloud-functions #ibm-cloud-storage

Вопрос:

Чего я хочу добиться, так это загружать файлы из Box непосредственно в корзину COS, не загружая их на свой локальный компьютер. Я хочу запустить этот код в облачных функциях IBM, поэтому мне нужно каким-то образом установить эту прямую загрузку.

 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 ищет абсолютный путь к файлу, загруженному на мой компьютер. Я также попытался создать общую ссылку на файл и вставить ее туда, но это не сработало.

Комментарии:

1. Когда вы загружаете, вы делаете это в системе, в которой выполняется код, аналогично загрузке. Если вы запускаете его как действие «Облачные функции», среда выполнения действия — это среда, в которой выполняется загрузка и загрузка.

2. Привет! Спасибо за ваши отзывы, в таком случае я предполагаю, что это невозможно в таком формате. Я запускаю свой код в облачных функциях таким образом, чтобы сначала загрузить файл, а затем загрузить его в box. Но поскольку CF является FaaaS, я понятия не имею, что происходит с моим загруженным файлом. Загрузка работает, но я получаю такие ошибки, как : «Предупреждение о ресурсах: Включить tracemalloc для получения обратной трассировки распределения объектов» или «Предупреждение о ресурсах: закрыто AF_INET, тип=SocketKind.SOCK_STREAM, прото=6, laddr=(‘ip-адрес’), raddr=(‘ip-адрес)». У вас есть какие-нибудь советы, как от них избавиться ?