ローカルファイルがダウンロードされずにS3に保存されたファイルと同じかどうかを確認するにはどうすればよいですか?大きなファイルを何度も何度もダウンロードしないようにする。 S3オブジェクトは電子タグを持っていますが、ファイルがアップロードされた場合は計算が難しく、このquestionからの解決策は機能していません。不要なダウンロードを避ける簡単な方法はありますか?ローカルファイルがboto3でダウンロードせずにS3オブジェクトと同じかどうかを確認するにはどうすればいいですか?
答えて
私はちょうど最後の修正された時間を比較して、それらが異なっているならダウンロードします。さらに、ダウンロードする前にサイズを比較することもできます。あなたはすぐに在庫を必要としない場合、あなたはその後、s3 storage inventoryを生成し、将来の使用のためにデータベースにインポートすることができ
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))
合意。ファイル名+サイズ+修正時間は通常十分です。物事が変更されていないことを100%保証する必要がある場合は、ETagを使用してください。 –
小さなローカルデータベースを使用できますか?テキストファイルですか?
- S3オブジェクトを1回ダウンロードします。そのETagではありません。
- 必要な署名を計算します。
- (ETag、署名)のペアを「データベース」に入れます。
次回、ダウンロードを続行する前に、「データベース」でETagを参照してください。存在する場合は、既存のファイルの署名を計算し、ETagに対応する署名と比較します。一致した場合、リモートファイルは同じファイルになります。
異なるチャンクで同じファイルが再アップロードされ、ETagが変更される可能性があります。これが可能性が高い場合を除き、偽陰性を無視してそのまれなケースでファイルを再ダウンロードすることができます。
"データベース"はS3オブジェクトタグになります。そうすれば、余分なリソースは必要なくなり、オブジェクトパス/キーが変更された場合でも署名を再計算する必要はありません。 –
私はそれが動作すると思う、または私はちょうど署名を計算し、S3オブジェクトにメタデータとしてそれを添付することができます。これは非常に標準的な操作であり、独自の解決法を書かなければならない方法があるはずです。また、 'aws s3 sync'コンソールコマンドがどのように動作するのか不思議です。 – DikobrAz
[5GBを超えるファイルに対してAmazon-S3 Etagを計算するアルゴリズムとは何ですか?](https://stackoverflow.com/questions/12186993/what-is-the-algorithm-to-compute- the-amazon-s3-etag-for-a-file-5gbより大きい)を使用して自分自身を計算することができますが、それをデータベースに格納すると繰り返し実行する必要はありません。 –
:bucket
、key
とローカルファイルfname
考えます。
here for normal file and huge multipart fileのようにローカルファイルEtagを計算します。
- 1. 2つのアドレスが同じかどうかを確認するにはどうすればいいですか?
- 2. 配列の値が同じかどうかを確認するにはどうすればいいですか?
- 3. aws s3のオブジェクトをプライベートバケットからパブリックバケットにコピーせずにダウンロードするにはどうすればいいですか?同じ地域のS3のバケット間
- 4. amazon S3で2つの大きなファイルが同じかどうかを確認するにはどうすればいいですか?
- 5. Scala - オブジェクトがスレッドセーフであるかどうかを確認するにはどうすればよいですか?
- 6. オブジェクトがコレクションであるかどうかを確認するにはどうすればよいですか? (スウィフト)
- 7. オブジェクトが「空」であるかどうかを確認するにはどうすればよいですか?
- 8. 2つのイメージに同じオブジェクトが含まれているかどうかを確認するにはどうすればよいですか?
- 9. ウェブサイト上のバイナリファイル(例:イメージ)がダウンロードせずに変更されたかどうかをプログラムで確認するにはどうすればよいですか?
- 10. javascriptオブジェクトがイメージかキャンバスかどうかを確認するにはどうすればよいですか?
- 11. オブジェクトの配列が同じ値を持っているかどうかを確認するにはどうすればいいですか
- 12. C++ 2つのオブジェクトが同じかどうかを確認するためにリレーショナル演算子をオーバーロードするにはどうすればよいですか?
- 13. Sqliteで行が0か1かどうかを確認するにはどうすればいいですか
- 14. 値が 'A2'で始まるかどうかを確認するにはどうすればいいですか?
- 15. pdfページにブックマークがあるかどうかを確認するにはどうすればいいですか?
- 16. 要素にクリックハンドラがあるかどうかを確認するにはどうすればいいですか?
- 17. ユーザーがindex.htmlにいるかどうかを確認するにはどうすればよいですか?
- 18. ページ上にアイコンがあるかどうかを確認するにはどうすればいいですか?
- 19. WPF、カーソルにファイルがあるかどうかを確認するにはどうすればいいですか?
- 20. ポップアップページが開いているかどうかを確認するにはどうすればよいですか?
- 21. 2つの配列に同じ要素がPerlで含まれているかどうかを確認するにはどうすればよいですか?
- 22. ASP.NETで同じユーザーであることを確認するにはどうすればよいですか?
- 23. jquery:ページにフォーカスがないかどうかを確認するにはどうすればよいですか?
- 24. 日付が正しいかどうかを確認するにはどうすればいいですか?
- 25. boto3 S3.Client.upload_fileobjが成功したかどうかを確認する方法?
- 26. 同じプログラムを使用している別のiPhoneが近くにあるかどうかを確認するにはどうすればいいですか?
- 27. 変数が存在するかどうかを確認するにはどうすればいいですか?
- 28. JavaScriptがセッションがnullかどうかを確認するにはどうすればいいですか?
- 29. オブジェクトのタイプを確認するにはどうすればよいですか?
- 30. ネットパイプサービスがリッスンしているかどうかを確認するにはどうすればよいですか
最後に変更した時間を比較してみませんか? – helloV