Skip to main content

Get a link to an object

You can:

We do not recommend using Cyrillic characters in object names. If you use Cyrillic, encode the part of the link containing Cyrillic characters to work with links to such objects.

  1. In the control panel, on the top menu, click Products and select S3.
  2. Go to the Buckets section.
  3. Open the bucket page → Objects tab.
  4. In the object row, click .
  5. In the link row, click .

You can:

You can get a temporary or permanent link to an object in a private bucket.

An object in a private bucket will be available via a link of the form https://<bucket_public_domain>/<object_name>, where:

When you first create a link to an object in a private bucket, a public bucket named links is automatically created in your project. The created link is added to it as an object with the same name as the main object. Objects in the links bucket have zero size and do not consume storage volume. If you set the link as temporary, the object with the link will be automatically deleted from the links bucket when the link stops working.

To create a link:

  1. In the control panel, on the top menu, click Products and select S3.

  2. Go to the Buckets section.

  3. Open the bucket page → Objects tab.

  4. In the menu of the object, select Make public.

  5. Optional: in the Link address field, change the object name that will appear in the link, or leave the current one.

  6. Optional: to ensure the link can only be used once, select the One-time link checkbox.

  7. Optional: to limit the link duration, select the Time limits checkbox and choose one of the options:

    • Delete after — the link will stop working after the selected time period from the moment of creation;
    • Delete at specified time — the link will stop working at the selected date and time.
  8. Click Create link.

  9. To copy the link, click . You can copy it later in the links bucket.

You can get a temporary link to an object using AWS SDK presigned URLs (Presigned URLs). For more details, see the Sharing objects with presigned URLs guide in the AWS documentation.

Script example:

import boto3

ACCESS_KEY = "<access_key>"
SECRET_KEY = "<secret_key>"
ENDPOINT_URL = "<s3_domain>"
BUCKET_NAME = "<bucket_name>"
OBJECT_KEY = "<path_to_object>"
EXPIRES_IN = "<time>"

s3 = boto3.client(
"s3",
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
endpoint_url=ENDPOINT_URL,
)

url = s3.generate_presigned_url(
ClientMethod="get_object",
Params={"Bucket": BUCKET_NAME, "Key": OBJECT_KEY},
ExpiresIn=EXPIRES_IN
)

print("\PresignedUrl
:")
print(url)

Specify:

  • <access_key> — the value of the Access key field from the S3 key;
  • <secret_key> — the value of the Secret key field from the S3 key;
  • <s3_domain>S3 API domain depending on the pool where the bucket is located;
  • <bucket_name> — bucket name;
  • <path_to_object> — path to the object in the bucket;
  • <time> — link duration in seconds.

Script example:

import boto3

def get_public_url(bucket_uuid: str, object_key: str) -> str:

return f"https://{bucket_uuid}.selstorage.ru/{object_key}"

if __name__ == "<file_name>":
bucket_uuid = "<uuid>"
object_key = "<path_to_object>"
url = get_public_url(bucket_uuid, object_key)
print("Public URL:", url)

Specify:

  • <file_name> — name of the Python file;
  • <uuid> — unique bucket identifier, can be found in the bucket public domain;
  • <path_to_object> — path to the object in the bucket.