查看底部的更新 - 问题略有变化
我正在尝试使用 boto3 的 .download_fileobj
方法将文件从 s3 下载到类似文件的对象,但是当我尝试检查下载的字节流时,它是空的。但是我不确定我做错了什么:
client = boto3.client('s3')
data = io.BytesIO()
client.download_fileobj(Bucket='mybucket', Key='myfile.wav', Fileobj=data)
print(data.read())
这会产生一个空字节串:
b''
更新:
有点解决了。所以事实证明,在 download_fileobj
行之后添加 data.seek(0)
可以解决问题。 鉴于此,我现在正在寻找一个答案来解释这段代码的作用以及它解决问题的原因。
最佳答案
谢谢,我遇到了同样的问题。 :o)
之所以可行,是因为文件缓冲区对象使用指向当前位置的内部指针进行读取或写入。
当您将多个字节传递给 read()
方法以读取或连续写入文件的下一部分时,这很重要。
当 client.download_fileobj()
写入字节流,或任何操作写入任何流时,指针定位到最后一次写入的末尾。
所以你需要告诉文件缓冲区对象你要从刚刚写入的内容开始读取。
关于python - BytesIO - 从 s3 下载文件对象但字节流为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72805719/