Загрузка изображения в AWS с помощью Python boto3

#python-3.x #amazon-web-services #amazon-s3 #amazon-ec2 #boto3

Вопрос:

Я пытаюсь загрузить изображение в AWS s3-Bucket , я использую boto3 и работаю правильно , но когда я открываю ссылку , она автоматически загружает изображение, а когда я загружаю изображение вручную, оно открывается в веб-браузере . в чем проблема ?

это мой код.

 import boto3
from botocore.exceptions import NoCredentialsError

ACCESS_KEY = 'xxxxxxxxxxxxxxxxx'
SECRET_KEY = 'xxxxxxxxxxxxxxxxx 4Tr4nUp'

def upload_to_aws(local_file, bucket, s3_file):
    s3 = boto3.client('s3', aws_access_key_id=ACCESS_KEY,
                      aws_secret_access_key=SECRET_KEY)

    try:
        s3.upload_file(local_file, bucket, s3_file)
        print("Upload Successful")
        return True
    except FileNotFoundError:
        print("The file was not found")
        return False
    except NoCredentialsError:
        print("Credentials not available")
        return False


uploaded = upload_to_aws('test.jpg', 'testverifcation', 'test.jpg')
 

Комментарии:

1. Подобное жесткое кодирование учетных данных aws не является хорошей практикой. Выполняется ли этот код на экземпляре ec2?

2. Когда объект загружается с помощью этого кода, каково значение Content-Type метаданных? (И я согласен с @Marcin-вам никогда не нужно вводить учетные данные в свой код. Вместо этого используйте команду AWS aws configure CLI для хранения учетных данных в файле конфигурации.)

Ответ №1:

 try:
    s3.upload_file(local_file, bucket, s3_file,ExtraArgs={'ACL': 'public-read', 'ContentType': 'image'})
    print("Upload Successful")
    return True
except FileNotFoundError:
    print("The file was not found")
    return False
except NoCredentialsError:
    print("Credentials not available")
    return False