Проблемы с загрузкой файлов в корзину Amazon s3 с веб-сайта на heroku

Я в процессе переноса своего сайта Django на Heroku. Но я не могу понять, как использовать Heroku с ведрами Amazon s3. Раньше я сохранял все загруженные файлы в проект, но я не могу сделать это с помощью Heroku.

Я слежу за документацией по Heroku: https://devcenter.heroku.com/articles/s3 и https://devcenter.heroku.com/articles/s3-upload-python Ковш находится во Франкфурте.

При загрузке файла я получаю следующую ошибку:

<Error>
    <Code>InvalidArgument</Code>
    <Message>a non-empty Access Key (AKID) must be provided in the credential.</Message>
    <ArgumentName>X-Amz-Credential</ArgumentName>
    <ArgumentValue>/20180502/eu-central-1/s3/aws4_request</ArgumentValue>
    …
</Error>

Я указал ключи в Heroku следующим образом: "heroku config: set AWS_ACCESS_KEY_ID = xxx AWS_SECRET_ACCESS_KEY = yyy"

Вы можете перейти на https://eventcollective.herokuapp.com/accounts/account/ и попробовать загрузить изображение.

из views.py

def sign_s3(request):
        S3_BUCKET = os.environ.get('S3_BUCKET')
        print(S3_BUCKET)

        file_name = request.GET.get('file_name')
        file_type = request.GET.get('file_type')

        s3 = boto3.client('s3', region_name='eu-central-1')

        presigned_post = s3.generate_presigned_post(
            Bucket=S3_BUCKET,
            Key=file_name,
            Fields = {"acl": "public-read", "Content-Type": file_type},
            Conditions=[
                {"acl": "public-read"},
                {"Content-Type": file_type}
            ],
            ExpiresIn=3600
        )
    return HttpResponse(json.dumps({
        'data': presigned_post,
        'url': 'https://%s.s3.amazonaws.com/%s' % (S3_BUCKET, file_name)
    }))

У вас есть идеи, как решить эту проблему?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
212
1

Ответы 1

Похоже, мне нужно добавить «aws_access_key_id» и «aws_secret_access_key» при создании клиентского объекта.

s3 = boto3.client(
        's3',
        region_name='eu-central-1',
        aws_access_key_id='KEY',
        aws_secret_access_key='KEY',
    )

Другие вопросы по теме