Vous pouvez émettre une URL limitée dans le temps avec generate_presigned_url
, mais il y a un problème que vous pouvez également créer une clé pour laquelle l'objet n'existe pas.
J'ai donc essayé d'émettre une URL limitée dans le temps après avoir vérifié si l'objet existe réellement avec get_object.
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 )
Si vous exécutez get_object sur un objet inexistant, vous obtiendrez une ClientError
.
Donc, si l'objet n'existe pas avec try ~ except
qui l'utilise, le processus se termine sans exécuter generate_presigned_url.
Recommended Posts