Я использую django-storage и boto3 для мультимедийных и статических файлов с помощью aws s3. Мне нужно получить ключ объекта ведра aws s3, чтобы я мог сгенерировать URL-адрес для этого объекта.
client = boto3.client('s3')
bucket_name = 'django-bucket'
key = ???
u = client.generate_presigned_url('get_object', Params = {'Bucket': bucket_name, 'Key': key,'ResponseContentType':'image/jpeg', 'ResponseContentDisposition': 'attachment; filename="your-filename.jpeg"'}, ExpiresIn = 1000)
Это в моих настройках:
STATICFILES_LOCATION = 'static'
MEDIAFILES_LOCATION = 'media'
STATICFILES_STORAGE = 'myproject.custom_storages.StaticStorage'
DEFAULT_FILE_STORAGE = 'myproject.custom_storages.MediaStorage'
AWS_ACCESS_KEY_ID = "my_access_key_id"
AWS_SECRET_ACCESS_KEY = "my_secret_access_key"
AWS_STORAGE_BUCKET_NAME = "django-bucket"
AWS_QUERYSTRING_AUTH = False
AWS_S3_CUSTOM_DOMAIN = AWS_STORAGE_BUCKET_NAME + ".s3.amazonaws.com"
# static media settings
STATIC_URL = "https://" + AWS_STORAGE_BUCKET_NAME + ".s3.amazonaws.com/"
MEDIA_URL = STATIC_URL + "media/"
ADMIN_MEDIA_PREFIX = STATIC_URL + "admin/"
Я могу получить путь к файлу изображения
ui = UserImage.objects.get(user=user_id, image=image_id)
url = ui.image.url
'https://django-bucket.s3.amazonaws.com/media/user_image/1497598249_49.jpeg'
Но я не знаю, как получить ключ объекта s3, чтобы я мог сгенерировать URL-адрес для этого объекта.
AWS_QUERYSTRING_AUTH = False
? Быстрая проверка документации показывает, что если для этого параметра установлено значение по умолчаниюTrue
,ui.image.url
автоматически вернет предварительно подписанный URL-адрес - вам не придется его создавать. - person Michael - sqlbot   schedule 17.06.2017AWS_QUERYSTRING_AUTH = False
будет подходящим вариантом, чтобы сделать статические файлы общедоступными. Есть ли способ ответить с этим предварительно подписанным URL-адресом и изменить его заголовки, в основномContentDisposition
и ContentType, чтобы его можно было загрузить? Или надо поменятьAWS_QUERYSTRING_AUTH = True
, чтобы он заработал? - person Kakar   schedule 17.06.2017