python - BytesIO - 从 s3 下载文件对象但字节流为空

标签 python amazon-s3 io boto3 bytesio

查看底部的更新 - 问题略有变化

我正在尝试使用 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/

相关文章:

python - 无法在 "object"类的实例上设置属性

python - AWS Lambda 函数无法连接到 S3 并查询 SQLite 数据库文件

java - 线程 "main"java.lang.NoSuchFieldError : JAVA_VENDOR 中的异常

java - StreamCorruptedException,当使用 ObjectInputStream 时

python - 在 Pandas 数据框中按组过滤具有最小值的行

python - 初学者 Python 用户 bool 查询

python - 为什么我的代码找不到数组中存在的某个字符串?

ruby-on-rails - Rails 上传到 AWS 创建 .zip.cpgz 文件循环

io - 过滤掉断管错误

java - 如何从java中的文本文件中跳过特定行?