Использовать имя файла в качестве имени файла при загрузке с s3 с помощью boto3 - PullRequest
0 голосов
/ 20 мая 2019

Я загружаю файл, используя boto3, как это:

  client = boto3.client('s3', 
           aws_access_key_id = id, 
           aws_secret_access_key = key

  client.upload_file('tmp/test.pdf', 'bucketname', 'test.pdf')

Затем я генерирую ссылку для скачивания, используя generate_presigned_url

   url = client.generate_presigned_url(
       ClientMethod = 'get_object',
       Params = {
          'Bucket': 'bucketname',
          'key': <randomhash>
      }

   )

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

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

Единственным недостатком использования уникального хеша является то, что мое имя файла для загрузки становится длинным хешем вместо имени, которое я дал ему при загрузке.

Ответы [ 2 ]

2 голосов
/ 20 мая 2019

Добавьте этот ключ к вашему Params:

'ResponseContentDisposition': f"attachment; filename = {filename}"

Это должно установить заголовок Content-Disposition ответа на загрузку так, чтобы было задано имя файла.

0 голосов
/ 20 мая 2019

@ Alexa,

Вам нужно будет передать имя файла в ключе вместо случайного хеша

, например

url = client.generate_presigned_url(
       ClientMethod = 'get_object',
       Params = {
          'Bucket': 'bucketname',
          'key': 'test.pdf'
      }

   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...