【问题标题】:Boto3: Verify if the file has been uploaded using upload_file()Boto3:使用upload_file()验证文件是否已上传
【发布时间】:2016-06-01 22:56:16
【问题描述】:
我正在使用 boto3 制作备份脚本,并使用此行上传项目:
bucket.upload_file(backup_file_name,bucket_path+backup_file_name)
如何验证此文件是否确实已上传到我的存储桶?我尝试使用 boto3 doc 查找内容,但没有找到任何内容。这个方法会抛出任何我可以处理的异常吗?
【问题讨论】:
标签:
python
amazon-web-services
amazon-s3
boto3
【解决方案1】:
它将引发boto3.exceptions.S3UploadFailedError。您还可以发出head_object 请求来验证对象是否看起来像它应该的那样。如果对象不存在,这将引发带有代码404 的botocore.ClientError。
【讨论】:
-
我刚刚检查了exceptions file,但“S3UploadFailedError”似乎是空的,它只是一个没有实现的 Boto3Error 子类......我是 python 新手,所以我可能误解了这一点。但是我会尝试使用 head_object
-
@Chittolina 如果传输失败,则会引发异常。请参阅来源here。如果你不相信干净的回报,那么 head_object 就是要走的路。
【解决方案2】:
检查的方法很少。首先,您应该始终为您的文件制作 sha256 哈希。上传时,请记住将此信息放在对象上传脚本的 Meta 部分中。
- 读取整个文件,从标头元数据中检索 sha256,然后重新计算必须检查它的计数。
- 为 PUT 上的存储桶添加事件。文件成功上传后,将事件发送到您可以检查的队列。因此,在成功上传但您的程序随后崩溃时,您仍然有一个回退,而不是再次重新上传文件。