0
0

More than 3 years have passed since last update.

S3にアップロードしたファイルの整合性を担保するPython

Last updated at Posted at 2020-08-14

はじめに

公式ナレッジAmazon S3 にアップロードされたオブジェクトの整合性を確認する方法を教えてください。をPython3で実装したものになります。

コード

import hashlib
import boto3
from botocore.exceptions import ClientError
from base64 import b64encode

upload_file_path = 'sample.zip'
s3_bucket_name = 'sample_bucket'
s3_object_key = 'sample.zip'

h = hashlib.new('md5')
file_read_size = h.block_size * (1024 ** 2)
with open(upload_file_path, 'rb') as f:
    read_bytes = f.read(file_read_size)
    while read_bytes:
        h.update(read_bytes)
        read_bytes = f.read(file_read_size)

    f.seek(0)

    try:
        boto3.client('s3').put_object(
            Body=f,
            Bucket=s3_bucket_name,
            ContentMD5=b64encode(h.digest()).decode("ascii"),
            Key=s3_object_key,
        )
    except ClientError as e:
        # ハッシュ不一致時のエラー処理
        if e.response['Error']['Code'] == 'BadDigest':
            print(e.response['Error']['Message'])
        else:
            raise

制限事項など

  • 5GBを超えていて、マルチパートアップロードが必要となるファイルには対応できません。

参考

ファイルのハッシュを計算するコードはこちらの記事を流用しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0