boto3でS3の期限付きURLを発行する(ファイルの存在確認付き)
generate_presigned_url
で期限付きURLを発行できるのですが、オブジェクトが存在しないキーに対しても作れちゃう問題があります。
なのでget_objectでオブジェクトが実在するか否かを確認してから、期限付きURLを発行するようにしてみました。
import boto3
import botocore
import logging
logger = logging.getLogger()
def create_presigned_url( bucket_name, key ):
s3 = boto3.client('s3')
try:
s3.get_object(
Bucket = bucket_name,
Key = key
)
url = s3.generate_presigned_url(
ClientMethod = 'get_object',
Params = {
Bucket = bucket_name,
Key = key
},
ExpiresIn = 3600,
HttpMethod = 'GET'
)
return url
except botocore.exceptions.ClientError as e:
logger.warning(e)
return 'File ' + bucket_name + '/' + key + 'not found'
bucket_name = 'BUCKET_NAME'
key = 'S3_OBJECT_KEY'
create_presigned_url( bucket_name, key )
存在しないオブジェクトに対してget_objectを実行すると、ClientError
が返ってきます。
なのでそれを利用してtry ~ except
でオブジェクトが存在しない場合は、generate_presigned_urlを実行せずに処理を終了させます。
Author And Source
この問題について(boto3でS3の期限付きURLを発行する(ファイルの存在確認付き)), 我々は、より多くの情報をここで見つけました https://qiita.com/motchi0214/items/91536294339f6765e7f3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .