0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Lambda(python)でS3からファイルを取得し、ファイルのマジックナンバーとMIMEを判定する

Posted at

やりたいこと

Lambda(python)で事前にS3バケットへアップロードしたファイルを取得し、ファイルの各メタデータであるマジックナンバーとMIMEを取り、ファイル形式を判定したい

構築

・S3バケット
・Lambda
・IAMポリシー
・IAMロール

やり方

Lambda→S3のポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

Lambdaソース

import boto3

def lambda_handler(event, context):
    # S3バケットとファイルキーを指定
    bucket_name = "バケット名"
    object_key = "ファイル名"
    
    # S3リソースの作成
    s3 = boto3.resource('s3')
    
    # バケットオブジェクトの取得
    bucket = s3.Bucket(bucket_name)
    
    # オブジェクトの取得
    obj = bucket.Object(object_key)

    
    # オブジェクトのメタデータを取得
    mime_type = obj.content_type
    print(f"MIME type: {mime_type}")
    
    # コンテンツを取得
    file_content = obj.get()['Body'].read()
    
    print("Finished fetching object")
    
    # ファイルの最初の100バイトを読み込む(マジックナンバーをチェックするため)
    file_content = obj.get()['Body'].read(100)  # 最初の100バイトを読み取る
    
    # バイナリデータを16進数の文字列に変換
    file_content_hex = file_content.hex()

    # マジックナンバーに基づいてファイル形式をチェック
    file_type = None
    if file_content_hex.startswith('ffd8ff'):
        file_type = 'JPEG'
    elif file_content_hex.startswith('89504e47'):
        file_type = 'PNG'
    elif file_content_hex.startswith('474946'):
        file_type = 'GIF'
    elif file_content_hex.startswith('424d'):
        file_type = 'BMP'
    elif file_content_hex.startswith('66747970', 8):  # HEICのマジックナンバーは9桁目から
        file_type = 'HEIC'
    else:
        file_type = 'Unknown'
 
    return {
        'statusCode': 200,
        'body': f"MIME type from S3: {mime_type}, File type detected:{file_type}, {file_content_hex}"
    }
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?