Get a reference to an object
You can:
- get a reference to an object in the public bucket — all objects are available through public domains repositories;
- get a link to an object in a private bucket — The link can be made permanent or temporary.
We do not recommend using Cyrillic characters in object names.If you use Cyrillic characters, encode the Cyrillic part of the reference to work with references to such objects.
Get a reference to an object in a public baket
- In the control panel, on the top menu, click Products and select S3.
- Go to the Buckets section.
- Open the baket page → Objects tab.
- On the line with the object, click.
- On the link line, click.
Get a link to an object in a private bucket
You can:
- create a permanent or temporary link in the control panel — the object will be accessible via a link through the public domain of the bucket;
- get a temporary link via a signed URL;
- get a permanent link through a script;
- Get a permanent or temporary link through tools such as Rclone, AWS CLI, Cyberduck, and S3 Browser.
Create a link in the control panel
You can get a temporary or permanent link to an object in a private bucket.
An object in a private bucket will be accessible by a link of the form https://<bucket_public_domain>/<object_name>, where:
<bucket_public_domain>— bucket public domain;<object_name>— object name.
When you first create a link to an object in a private bucket, a public links bucket is automatically created in the 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 space.If you configure a link as a temporary link, the object with the link will be automatically removed from the links bucket when the link stops working.
To create a link:
-
In the control panel, on the top menu, click Products and select S3.
-
Go to the Buckets section.
-
Open the baket page → Objects tab.
-
From themenu of the object, select Open Access.
-
Optional: in the Link Address field, change the name of the object to be displayed in the link, or leave the current one.
-
Optional: to allow the link to be clicked only once, check the One-time link checkbox.
-
Optional: to limit the time the link is valid, check the Time Limits checkbox and select one of the options:
- Delete via — link will stop working after the selected time interval after creation;
- Delete at a specified time — the link will stop working on the selected date and time.
-
Click Create Link.
-
To copy a link, click. You can copy it later in the
linkspackage.
Get a temporary link via a signed URL
You can use AWS SDK Presigned URLs to get a temporary reference to an object.For more information, see Sharing objects with presigned URLs in the AWS documentation.
Python
PHP
JavaScript
Java
Go
Sample script:
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>— field value Access key from S3 key;<secret_key>— field value Secret key from S3 key;<s3_domain>— S3 API domain depending on the pool in which the bucket is located;<bucket_name>— bucket name;<path_to_object>— path to the object in the baket;<time>— link validity time in seconds.
Sample script:
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\Exception\AwsException;
$selectelS3 = new S3Client([
'version' => 'latest',
'region' => '<pool>',
'endpoint' => '<s3_domain>':,
'use_path_style_endpoint' => true,
'credentials' => [
'key' => '<access_key>',
'secret' => '<secret_key>',
],
]);
$bucket = '<bucket_name>';
$key = '<path_to_object>';
try {
$cmd = $selectelS3->getCommand('GetObject', [
'Bucket' => $bucket,
'Key' => $key
]);
$request = $selectelS3->createPresignedRequest($cmd, '<time>');
$presignedUrl = (string)$request->getUri();
echo "Публичная ссылка: $presignedUrl\n";
} catch (AwsException $e) {
echo "Ошибка генерации ссылки: " . $e->getMessage() . "\n";
}
Specify:
<pool>— pool where the buckets are located;<s3_domain>— S3 API domain depending on the pool in which the bucket is located;<access_key>— field value Access key from S3 key;<secret_key>— field value Secret key from S3 key;<bucket_name>— bucket name;<path_to_object>— path to the object in the baket;<time>— link validity time, e.g.+1 hour.
Sample script:
import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3";
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
const client = new S3Client({
region: "<pool>",
endpoint: "<s3_domain>",
forcePathStyle: true,
credentials: {
accessKeyId: "<access_key>",
secretAccessKey: "<secret_key>",
},
});
async function generatePresignedUrl() {
const bucket = "<bucket_name>";
const key = "<path_to_object>";
const command = new GetObjectCommand({ Bucket: bucket, Key: key });
const url = await getSignedUrl(client, command, { expiresIn: <time> });
console.log("Presigned URL:", url);
}
generatePresignedUrl().catch(console.error);
Specify:
<pool>