我正在使用boto3尝试上传文件。如果有人能解释一下file_upload()
和put_object()
s3 bucket 方法在boto3中确切的区别将会很有帮助?
- 它们之间是否有任何性能差异?
- 它们中的任何一个是否在后台处理分段上传功能?
- 两者的最佳使用情况是什么?
我正在使用boto3尝试上传文件。如果有人能解释一下file_upload()
和put_object()
s3 bucket 方法在boto3中确切的区别将会很有帮助?
upload_file
方法由 S3 传输管理器处理,这意味着如果需要,它将自动在幕后为您处理多部分上传。
put_object
方法直接映射到低级 S3 API 请求。 它不会为您处理多部分上传。 它将尝试通过单个请求发送整个正文。
put_object()
方法怎么办? - Tushar Nirasupload_file
执行分块上传时中断,这会导致上传失败吗?因为只有一些部分被上传和完整性检查,S3是否会接受半上传的文件? - CMCDragonkai我觉得另一个值得注意的区别是,upload_file() API允许您使用回调函数跟踪上传进度。有关详细信息,请单击此处。
另外,正如boto的创建者@garnaat所提到的,upload_file()在幕后使用了多部分技术,因此检查端到端文件完整性并不直接(虽然有一种方法),但put_object()会一次性上传整个文件(尽管限制为5GB),这样通过传递Content-MD5参数更容易检查完整性,而该参数已经作为put_object() API的参数提供。
还有一个需要提及的事情是,put_object()
需要一个文件对象,而upload_file()
需要上传文件的路径。例如,如果我已经在本地存储了一个json文件,那么我会使用upload_file(Filename='/tmp/my_file.json', Bucket=my_bucket, Key='my_file.json')
。
然而,如果我的任务中有一个字典,我可以将其转换为json,并使用put_object()
来实现:
records_to_update = {'Name': 'Sally'}
records_to_update_json = json.dumps(records_to_update, default=str)
put_object(Body=records_to_update_json, Bucket=my_bucket, Key='my_records')
upload_fileobj
来实现这个功能。 - Nimrod Morag
file_upload()
函数添加文档链接? - user378704