Sie können eine zeitlich begrenzte URL mit "generate_presigned_url" angeben. Es besteht jedoch das Problem, dass Sie auch einen Schlüssel erstellen können, für den das Objekt nicht vorhanden ist. Daher habe ich versucht, eine zeitlich begrenzte URL auszugeben, nachdem ich überprüft habe, ob das Objekt tatsächlich mit get_object vorhanden ist.
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 )
Wenn Sie get_object für ein nicht vorhandenes Objekt ausführen, erhalten Sie einen "ClientError". Wenn das Objekt mit "try ~ außer" nicht vorhanden ist, wird der Prozess beendet, ohne generate_presigned_url auszuführen.
Recommended Posts