0
medias = ['https://baby-staging-bucket.s3.us-east-2.amazonaws.com/asset/0002.jpg', 
        'https://baby-staging-bucket.s3.us-east-2.amazonaws.com/asset/2.png', 
        'https://baby-staging-bucket.s3.us-east-2.amazonaws.com/asset/02.png'
    ]
for i in medias:
    file_name = i.split("/")[-1]
    urllib.urlretrieve (i, "media/"+file_name)

# writing files to a zipfile
local_os_path = f'media/{title}.zip'
with ZipFile(local_os_path, 'w') as zip:
    # writing each file one by one
    for file in medias:
        file_name = file.split("/")[-1]
        zip.write("media/"+file_name)
        os.remove("media/"+file_name)
    
    s3 = session.resource('s3')
    storage_path = f'asset/nfts/zip/{title}.zip'
    s3.meta.client.upload_file(Filename=local_os_path, Bucket=AWS_STORAGE_BUCKET_NAME, Key=storage_path)
    # os.remove(local_os_path)
    DesignerProduct.objects.filter(id=instance.id).update(
        zip_file_path=S3_BUCKET_URL + storage_path, 
    )

我正在使用此代码创建 zip 文件并保存到 w3 存储桶。Fitst 我正在下载到本地系统,然后压缩所有文件并将 zip 文件保存到 s3 存储桶在我的本地系统中,我能够提取 zip 文件,但是当我从 s3 存储桶下载时,我无法提取它。

https://baby-staging-bucket.s3.us-east-2.amazonaws.com/asset/nfts/zip/ant.zip

这是我上传 zip 文件的 s3 路径。可能是什么原因请看看

4

1 回答 1

1

将上传移到with块之后。

您在存档关闭之前上传您的 zip 文件。请参阅ZipFile.close()

关闭存档文件。您必须在退出程序之前调用 close() 否则将不会写入基本记录。

closewith语句自动调用。

您在程序退出后打开本地文件 - 这意味着在 zipfile 关闭后 - 因此您的本地版本不会损坏。

于 2021-11-14T08:34:11.700 回答