How to check if local file is same as S3 object without downloading it with boto3?
如何在不下载的情况下检查本地文件是否与存储在S3中的文件相同?避免一次又一次地下载大文件。 S3 对象具有电子标签,但如果文件是分段上传的,并且此问题的解决方案似乎不起作用,则它们很难计算。有没有一些更简单的方法可以避免不必要的下载?
如果它们不同,我会比较最后修改时间并下载。此外,您还可以在下载前比较大小。给定一个
1
2 3 4 5 6 7 |
import boto3 import os.path def isModified(bucket, key, fname): |
你能用一个小的本地数据库吗?一个文本文件?
- 一次下载一个 S3 对象。不是它的ETag。
- 计算你想要的任何签名。
- 将(ETag,签名)对放入”数据库”。
下次,在继续下载之前,请在”数据库”中查找 ETag。如果存在,请计算现有文件的签名,并与对应于 ETag 的签名进行比较。如果它们匹配,则远程文件与您拥有的相同。
同一文件可能会以不同的分块方式重新上传,从而更改 ETag。除非这很有可能,否则您可以忽略误报并在这种极少数情况下重新下载文件。
如果您不需要即时库存,您可以生成 s3 存储库存,然后将它们导入您的数据库以备将来使用。
为普通文件和大型多部分文件计算本地文件 Etag,如下所示。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/python/267948.html