Python 如何将内存中的zip文件上载到S3 bucket
我正在尝试将内存中的zip文件上载到S3存储桶(以避免服务器上出现临时文件) 这是我的密码:Python 如何将内存中的zip文件上载到S3 bucket,python,amazon-web-services,amazon-s3,boto3,Python,Amazon Web Services,Amazon S3,Boto3,我正在尝试将内存中的zip文件上载到S3存储桶(以避免服务器上出现临时文件) 这是我的密码: import zipfile import io zip_bytes_io = io.BytesIO() zip_archive = zipfile.ZipFile(zip_bytes_io, mode='a', compression=zipfile.ZIP_DEFLATED) zip_archive.writestr('test.txt',
import zipfile
import io
zip_bytes_io = io.BytesIO()
zip_archive = zipfile.ZipFile(zip_bytes_io, mode='a',
compression=zipfile.ZIP_DEFLATED)
zip_archive.writestr('test.txt', b'My string')
s3_client = boto3.client('s3')
zip_bytes_io.seek(0) # So that bytes are read from beginning
s3_client.upload_fileobj(zip_bytes_io, test_bucket, 'test.zip')
当我运行上述代码时,它会将文件上传到S3存储桶。但是,当我下载文件时,我无法解压缩它。我得到错误:“错误1-不允许操作。”
我想这是因为我没有正确上传文件。感谢任何帮助:)查找
错误1-不允许操作。
联机错误,看起来可能是Mac os打开zip文件的问题
尝试以不同方式打开文件?不确定是否有其他错误源,但您正在上载的存档文件不完整。完成
writestr()
(存档完成)后,您必须首先zip\u archive.close()
。您可以在zip\u bytes\u io
上尝试tell()
,查看close()
@OndrejK前后的差异。我想:s3\u client.upload\u fileobj(zip\u bytes\u io,test\u bucket,'test.zip')
默认关闭文件?如果我添加行zip\u archive.close()
则异常是对已关闭的文件执行{ValueError}I/O操作。
被抛出。看起来zip\u archive.close()
实际上也关闭了zip\u bytes\u io
,但这不是我可以重现的行为。你能展示一下最近失败的全部情况吗?但正如前面提到的,我突然想到了。它可能一点也不相关。是否可以将zip写入临时文件,然后使用将其上载--在关闭它之前发送tempfileobj.name作为文件名?啊,是的,您是正确的。我所要做的就是使用这个工具:而不是Mac的默认工具,Archive Utility
解压文件,它就工作了。