3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

boto3でS3の期限付きURLを発行する(ファイルの存在確認付き)

Posted at

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を実行せずに処理を終了させます。

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?