[英]How to check if local file is same as S3 object without downloading it with boto3?
如何檢查本地文件是否與存儲在S3中的文件相同而不下載? 避免一次又一次地下載大文件。 S3對象有電子標簽,但如果文件是按部件上傳的,並且這個問題的解決方案似乎不起作用,則難以計算。 有沒有更簡單的方法來避免不必要的下載
我只是比較上次修改時間和下載,如果它們不同。 此外,您還可以在下載之前比較尺寸。 給定一個bucket
, key
和本地文件fname
:
import boto3
import os.path
def isModified(bucket, key, fname):
s3 = boto3.resource('s3')
obj = s3.Object(bucket, key)
return int(obj.last_modified.strftime('%s')) != int(os.path.getmtime(fname))
你能使用一個小的本地數據庫,例如文本文件嗎?
下次,在繼續下載之前,在“數據庫”中查找ETag。 如果存在,請計算現有文件的簽名,並與ETag對應的簽名進行比較。 如果匹配,則遠程文件與您具有的相同。
可能會使用不同的分塊重新上載相同的文件,從而更改ETag。 除非這很可能,否則你可以忽略假陰性並在極少數情況下重新下載文件。
如果您不需要立即清點,則可以生成s3存儲庫存,然后將其導入數據庫以供將來使用。
計算本地文件Etag,如下所示,用於普通文件和大型多部分文件 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.