【问题标题】:boto3 version and appending if changes are made to fileboto3 版本并在对文件进行更改时附加
【发布时间】:2016-11-17 22:43:15
【问题描述】:

我已经编写了一个调用来在 boto3 存储桶中上传文件。 在调用中,您需要传入文件名、存储桶。 然后它将文件上传到存储桶。 但是,我正在尝试为上传到存储桶的每个文件添加版本。因此,为了实现这一点,我为我的存储桶启用了版本控制;然后给了我上传到该存储桶的文件的版本。

bucketFile = s3.meta.client.upload_file(filename, str(bucket),filename)

然后要获取我上传的那个文件的对象版本,我执行以下操作

objectSummary = s3.ObjectSummary(bucket,filename)
object = objectSummary.get()
versionID = object.get('VersionId')

以下代码为我上传到该存储桶的每个文件提供了一个版本 ID。 所以我想做的是 ---> 获取文件的版本 ----> 像这样将该版本附加到我的本地数据库中

versionsAdd = versions(version_url=versionID, filename=filename)

但是对我来说困难的部分是,如果文件内容仍然相同,我不想附加该版本。无论文件内容是什么,boto3 都会给我 versionID。所以对我来说,我希望能够读取文件并将其与存储桶中的现有文件进行比较。如果对文件进行了更改,我只想将其附加到本地数据库中的我的版本下。如果上传到存储桶的文件仍然是相同的内容 --> 跳过它,不要添加到我的本地数据库中。

【问题讨论】:

    标签: python amazon-web-services amazon-s3 boto3


    【解决方案1】:

    您可以使用与 Amazon S3 中的对象关联的ETag 来比较对象并确定它们是否相同。它是对象内容的 MD5 校验和。

    如果新版本的 ETag 与之前的版本相同,直接跳过即可。

    【讨论】:

    • 哦!那么同一个文件有相同的 ETAG 吗?
    • 是的。 ETag 是内容的 MD5 校验和。
    • 救命稻草!非常感谢!
    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2014-05-17
    • 2017-12-21
    相关资源
    最近更新 更多