'Подпись запроса, которую мы вычислили, не совпадает с подписью, которую вы предоставили' в DigitalOcean Spaces

Мое приложение django сохраняет загруженные пользователем файлы в моем ведре s3 в DigitalOcean Spaces (используя django-storages[s3], которое основано на amazon-s3), а путь к файлу сохраняется в моей базе данных. Однако, когда я нажимаю на url, расположенный в базе данных, он приводит меня на страницу с этой ошибкой: The request signature we calculated does not match the signature you provided. Check your key and signing method.

Фактический url, например, выглядит примерно так: https://my-spaces.nyc3.digitaloceanspaces.com/media/uploads/Recording_2.mp3?AWSAccessKeyId=DO009ABCDEFGH&Signature=Y9tn%2FTZa6sVlGGZSU77tA%3D&Expires=1604202599. В идеале сохраняемый url должен быть https://my-spaces.nyc3.digitaloceanspaces.com/media/uploads/Recording_2.mp3

На самом деле это влияет и на другие части моего проекта, потому что доступ к url будет осуществляться позже с помощью requests, но из-за этой ошибки я получаю status [402].

Мой файл settings.py выглядит следующим образом:

AWS_ACCESS_KEY_ID = 'DO009ABCDEFGH'
AWS_SECRET_ACCESS_KEY = 'Nsecret_key'
AWS_STORAGE_BUCKET_NAME = 'bucket_name'
AWS_DEFAULT_ACL = 'public-read'
AWS_S3_ENDPOINT_URL = 'https://transcribe-spaces.nyc3.digitaloceanspaces.com/'
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400'
}

AWS_MEDIA_LOCATION = 'media/'
PUBLIC_MEDIA_LOCATION = 'media/'
MEDIA_URL = '%s%s' % (AWS_S3_ENDPOINT_URL, AWS_MEDIA_LOCATION)
DEFAULT_FILE_STORAGE = 'mysite.storage_backends.MediaStorage'

Сохраняемый url содержит ключ доступа, подпись, которая была использована для записи файла в ведро, и таймаут. Я хочу, чтобы всего этого не было, когда url к файлу сохраняется в базе данных. Я пытался редактировать параметры MEDIA_URL, AWS_STORAGE_BUCKET_NAME и другие, но они либо вызывали ошибки, которые ломали приложение, либо вообще ничего не делали.

Это должно помочь,

AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''
AWS_STORAGE_BUCKET_NAME = 'space_name'
AWS_DEFAULT_ACL = 'public-read'
AWS_QUERYSTRING_AUTH = False
AWS_S3_ENDPOINT_URL = 'nyc3.digitaloceanspaces.com'
AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=31536000'}
AWS_S3_CUSTOM_DOMAIN = 'transcribe-spaces.nyc3.digitaloceanspaces.com'

PUBLIC_MEDIA_LOCATION = 'media'
MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{PUBLIC_MEDIA_LOCATION}/'
DEFAULT_FILE_STORAGE = 'mysite.storage_backends.PublicMediaStorage'

Цифровые океанские пространства

Вернуться на верх