Я использую boto3 (пакет python для Amazon Web Services), чтобы загрузить zip-файл в корзину. Он автоматически разбивает этот zip-файл на несколько частей и загружает его.
s3 = get_resource() # This function returns the resource
GB = 1024 ** 3
# Ensure that multipart uploads only happen if the size of a transfer
# is larger than S3's size limit for nonmultipart uploads, which is 5 GB.
config = TransferConfig(multipart_threshold=5 * GB)
s3.meta.client.upload_file("AllPublicXML.zip", "vg-clinicaltrails2", "AllPublicXML_{}.zip".format(output_file_id), Config=config)
print ("S3 Uploading successful")
Работает как шарм. Теперь я загружаю его, используя:
s3 = get_resource()
GB = 1024 ** 3
config = TransferConfig(multipart_threshold=5 * GB)
list_all_objects_resource(s3, "vg-clinicaltrails2")
print("S3 download Starting for AllPublicXML_{}.zip".format(zip_file_id))
s3.meta.client.download_file("vg-clinicaltrails2", "AllPublicXML_{}.zip".format(zip_file_id), "temp_AllPublicXML.zip", Config=config)
print ("S3 download successful")
Загружает файл и сохраняет его как temp_AllPublicXML.zip
. Я думаю, что этот файл не был собран из нескольких частей загрузки. Если я использую команду bash unzip temp_AllPublicXML.zip
, я получаю ответ:
Archive: temp_AllPublicXML.zip
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of temp_AllPublicXML.zip or
temp_AllPublicXML.zip.zip, and cannot find temp_AllPublicXML.zip.ZIP, period.
Как мне собрать этот файл вместе или использовать функцию загрузки в boto3?
Заранее спасибо
EDIT:
Чтобы уточнить, мне нужно, по возможности, чистое решение на Python и полный zip-файл после загрузки, а не сами извлеченные файлы.