S3.Client.upload_file() 和 S3.Client.upload_fileobj() 有什么区别?

新手上路,请多包涵

根据 S3.Client.upload_fileS3.Client.upload_fileobjupload_fileobj 听起来可能更快。但是有没有人知道具体情况?我应该只上传文件,还是应该以二进制模式打开文件以使用 upload_fileobj ?换句话说,

 import boto3

s3 = boto3.resource('s3')

### Version 1
s3.meta.client.upload_file('/tmp/hello.txt', 'mybucket', 'hello.txt')

### Version 2
with open('/tmp/hello.txt', 'rb') as data:
    s3.upload_fileobj(data, 'mybucket', 'hello.txt')

版本 1 还是版本 2 更好?有区别吗?

原文由 Flair 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
1 个回答

upload_fileobj 的要点是文件对象不必首先存储在本地磁盘上,但可以在 RAM 中表示为文件对象。

Python 有用于此目的的 标准库模块

代码看起来像

import io
import boto3

s3 = boto3.client('s3')

fo = io.BytesIO(b'my data stored as file object in RAM')
s3.upload_fileobj(fo, 'mybucket', 'hello.txt')

在这种情况下,它会执行得更快,因为您不必从本地磁盘读取。

原文由 Samuel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题