Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将内存中的zip文件上载到S3 bucket_Python_Amazon Web Services_Amazon S3_Boto3 - Fatal编程技术网

Python 如何将内存中的zip文件上载到S3 bucket

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',

我正在尝试将内存中的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', 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
解压文件,它就工作了。