我在查看 boto3 文档时没有找到是否原生支持检查 S3 中的文件是否已存在,如果不存在则不尝试重新上传的功能。
这是我已经实现的内容:
import boto3
s3_client = boto3.client('s3')
s3_bucket = 'bucketName'
s3_folder = 'folder1234/'
temp_log_dir = "tempLogs/"
s3_client.upload_file(temp_log_dir + file_name, s3_bucket, s3_folder + file_name)
我注意到的是,如果文件已经存在于S3中,则来自boto3的.upload_file()仍会传输该文件。我通过查看iftop进行了此检查。
是否有一些参数我错过了以禁用“自动覆盖文件”?
谢谢
编辑尝试head方法
s3 = boto3.resource('s3')
file_name = 'somelogfile.gz'
try:
s3.Object(s3_bucket+ s3_folder+s3_filename).load()
print 'success'
except botocore.exceptions.ClientError as e:
print e
s3_client.head_object('<bucket>', '<keyname>')
,它只获取元数据,所以应该相对较轻。 - AChampiontry: except:
块中,因为如果不存在它会抛出一个ClientError
。 - AChampion"%s()只接受关键字参数。" % py_operation_name)
- chowpay200
成功代码,因为botocore
模块会处理它。你只能得到错误代码。 - AChampion