Я использую Django как серверную часть, чтобы возвращать API на стороне Angular внешнего интерфейса. Я использовал AWS S3 для хранения мультимедиа. URL-адрес создается с использованием URL-адреса s3 и может загружать файлы в корзину S3. Проблема заключается в том, что содержимое изображения получает сообщение 400 Bad Request. Ниже приведен мой код:
AWS_ACCESS_KEY_ID = "XXXXXXXXXXXXXXXXXX"
AWS_SECRET_ACCESS_KEY = "XXXXXXXXXXXXXXXXXXX"
AWS_STORAGE_BUCKET_NAME = "app"
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
#AWS_QUERYSTRING_AUTH=False
, когда я раскомментирую # AWS_QUERYSTRING_AUTH = False и делаю все изображения s3 как publi c, а затем могу получить доступ к изображению в Интернете, необходимо явно сделать изображение publi c, чего я не хочу. после комментария получение URL-адреса, например -
https://famesta-app.s3.ap-south-1.amazonaws.com/user_30/profile/download.png?AWSAccessKeyId=XXXXXXXXXXXXXXXX&Signature=XXXXXXXXXXXXXXXXXXXx%3D&Expires=1592369615
Ошибка:
<Error>
<Code>InvalidRequest</Code>
<Message>The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.</Message>
<RequestId>20DF944878611</RequestId>
<HostId>sZPyWKvGHSRt7ANyDlOUh71/xUV14H0avAjaERfkoQxiq0=</HostId>
</Error>
Мой регион: Азиатско-Тихоокеанский регион c (Мумбаи)
AWS Конфигурация-
Конфигурация CORS
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
И в разрешении S3 я разрешил доступ Publi c. Если я сделаю целое ведро как publi c и AWS_QUERYSTRING_AUTH = False, тогда я смогу загрузить изображение и получить доступ в Интернет ко всему, что я хотел, но я не думаю, что это безопасно сделать саму корзину publi c. Пожалуйста, помогите мне.