React.js & Django S3 Загрузка Дилемма 403 / Подпись не совпадает - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь разместить на своем веб-сайте функцию, позволяющую пользователям загружать звуки (mp3 / wav / etc.), И они будут храниться в s3 под именем bucketname / audio / username / sound.mp3, но я продолжаю получать 403ошибки после того, как мой бэкэнд django возвращает подписанный URL.Я настроил свое ведро 500 различными способами, чтобы попытаться заставить это работать, и я поделюсь своими текущими настройками ниже, поэтому дайте мне знать, если это все еще может быть проблемой, но на данный момент я не знаю, в чем проблемасовсем.Мой бэкэнд django возвращает подписанный URL-адрес в порядке, и оба URL-адреса совпадают, но я получаю эту ошибку при нажатии на возвращенный URL-адрес aws .и эта ошибка в консоли , которая возвращается после запроса get к django .Я ломал голову, пытаясь понять, что может быть не так, и у меня кончились вещи, которые можно попробовать.Вот моя текущая политика сегментов, политика IAM, а также код django и реагировать (я использую библиотеку под названиемact-s3-uploader).

CORS

IAM

Django (справа вверху - ключ доступа и секрет, импортированные из переменных env, поэтомуэто не проблема)

React Component

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 22 августа 2018

Я не знаю, полезно это или нет, но у меня была похожая проблема, которую я решил, как показано ниже.Я полагаю, что это потому, что заголовки для Content-Type должны соответствовать метаданным файла:

def sign_s3_upload(request):
    object_name = request.GET['objectName']
    content_type = mimetypes.guess_type(object_name)[0]
    if content_type == 'audio/x-wav':
        content_type = 'audio/wav'

    signed_url = conn.generate_url(
        300,
        "PUT",
        settings.AWS_STORAGE_BUCKET_NAME,
        'uploads/' + object_name,
        headers = {'Content-Type': content_type,
                   'x-amz-acl': 'public-read',
                   })


    return HttpResponse(json.dumps({'signedUrl': signed_url}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...