女子大生まあるの「好きに言わせてっ!」

美味しいもの食べてる時が一番幸せ教

S3でアップロードした画像ファイルを一致するか確かめてみた

まあるです。

本日AWSのS3にあげた画像が容量は一緒だが中身の画像が違う場合にどうやったらその差異を見つけられるかなと調べていたら出てきた「ETag」について書き留めたいと思います。

結論から言うとこれでは私の画像の差異を見つけられず没になりました笑

でもせっかく調べていつか使うかもだし、、、記事に残す次第です!

 

最初はOpenCVでの画素を調べて2点の差分をとる方法が出てきましたが、なんというかこれでは求めていることに対してのコード書く時間や負担が大きすぎるなと思い、違うアプローチを探しました。

 

次にAWSにばっちし書いてた「ETag」ですね

詳しくはこちら

docs.aws.amazon.com

ファイルの整合性を確かめてくれるものらしいです。

読み方はエンティティタグ。

実物を示すタグみたいな意味なのかな?わかる人教えてください笑

 

実装としてpython boto3で組みました。

S3からETagを取得する際は

オブジェクトを初期化してS3のクライアントを作成したあとにhead_object()しました

S3のクライアントをs3_clientとすると

result = s3_client.head_object(Bucket=bucket_name, Key=path/test.csv)

result['ETag']

bucket_nameにはファイルが入っているS3のバケット名、pathにはバケットからそのファイルまでの道を書きます。

2行目をprintすると文字列の羅列が出てきます。

 

次にローカルの画像からETagを取得する際は

hashlibモジュールを使用してMD5ハッシュ値を調べました。

import hashlib

hash_md5 = hashlib.md5()

with open(file_path, "rb") as f:                

  for chunk in iter(lambda: f.read(4096), b""):                    

   hash_md5.update(chunk)            

return hash_md5.hexdigest()

上記を関数としてfile_pathにファイルの保存先を記入します。

printするとMD5の結果が出てきます。

 

今回試した画像では作られた日付も出力した内容も違かったんですが同じ値が出てきていました。それはそれで調査ミスかもしれないです。思い当たる節がある、、、😭

今回はS3内のETagの出力方法やhashlibの使い方がわかって勉強になりました。

 

まある

 

参考:

EtagをつかってS3にアップロードしたファイルの整合性をたしかめてみる(マルチパートアップロードなし) #AWS - Qiita