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

根据https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.upload_filehttps://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.upload_fileobj,upload_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更好?有区别吗?

解决方法:

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

为此目的,Python有standard library module.

代码看起来像

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

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

上一篇:AWS 15 年(1):从 Serverful 到 Serverless


下一篇:python – 无法安装boto3