Могу ли я создать одноразовую ссылку S3 с содержанием-вложением?

У меня есть PDF-файлы, изображения и текстовые файлы в S3. Мне нужна возможность создать ссылку на скачивание файла, но только иногда. Иногда мои пользователи хотят просматривать файлы в Интернете, но иногда они хотят нажать кнопку "скачать", чтобы захватить их за один шаг (против открытия их и щелчка по значку диска в средстве просмотра PDF или нажатия CTRL + S и т. Д.). В последнем случае я хотел бы иметь возможность генерировать ссылку, которая говорит S3, что делать. Было бы неплохо, если бы я мог также контролировать имя вложения, но я был бы более чем счастлив просто сделать вложение.

сноска

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

1 ответ

Решение

Вы можете динамически добавлять заголовки к ответу на основе URL, передавая дополнительные параметры response-content-disposition=attachment; filename='mycustomFileName' как описано в документах s3 Get Obejct.

Это, однако, работает только для аутентифицированных (ограниченных по времени) URL-адресов, в противном случае пользователь получит InvalidRequest ошибка похожа на следующее:

<Error>
<Code>InvalidRequest</Code>
<Message>
Request specific response headers cannot be used for anonymous GET requests.
</Message>
<RequestId>C5066C8E8F647EA2</RequestId>
<HostId>
ik5oj4QfcJX+5+F/PdootFuq47bh6hLpDqhbeyWlw+AADvMPpOPio6eYwXW7Fnx+H/zpVBM7DbA=
</HostId>
</Error>

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

<a href="/images/490/736d910771bc3ee2.jpeg" download="some_nice_image_name.jpg">

хотя это явно помогает скребкам автоматически аннотировать ваш контент.

Другие вопросы по тегам