Хранение и резервные копии

Presigned URL

1 мин чтения

Presigned URL — временная ссылка, которая дает доступ к закрытому объекту без передачи ключей. С ее помощью можно дать клиенту скачать файл или позволить браузеру загрузить файл прямо в бакет.

В примерах используется AWS CLI, настроенный для UzCloud. Замените my-bucket на имя своего бакета.

Примечание

Presigned URL работает до истечения срока для любого, у кого она есть. Максимальный срок — 7 дней (604 800 секунд). Если отозвать ключ доступа, которым подписана ссылка, она перестанет работать.

Ссылка на скачивание

aws s3 presign s3://my-bucket/docs/report.pdf --expires-in 3600

Команда выводит ссылку, действующую один час. Такие ссылки умеют создавать и графические клиенты: Share в Cyberduck, Generate Web URL в S3 Browser.

Ссылка на загрузку

AWS CLI создает только ссылки на скачивание. Ссылки на загрузку создаются через SDK, например на Python:

import boto3
from botocore.config import Config

s3 = boto3.client(
    "s3",
    endpoint_url="https://s3.uzcstorage.uz",
    region_name="default",
    config=Config(signature_version="s3v4", s3={"addressing_style": "path"}),
)

url = s3.generate_presigned_url(
    "put_object",
    Params={"Bucket": "my-bucket", "Key": "uploads/photo.jpg", "ContentType": "image/jpeg"},
    ExpiresIn=600,
)
print(url)

Загрузите файл по ссылке (Content-Type должен совпадать с указанным при подписи):

curl -X PUT -H "Content-Type: image/jpeg" --upload-file photo.jpg "<presigned URL>"

Для загрузки из браузера также настройте для бакета CORS. Примеры для других языков: JavaScript, PHP, Go.

Совет

См. также: