Получить URL (ссылку) публичного объекта S3 программно

Я сохраняю один публичный объект в везде AWS S3 с использованием данного java API на моем сервере Теперь мне нужно вернуть общедоступный URL-адрес объекта S3 моему клиенту

До сих пор я не нашел никакого вызова API, который может вернуть общедоступный URL (или поле ссылки) объекта S3

Есть ли способ получить URL-адрес?

Ответ 1

s3Client.getUrl(AWS_BUCKET, s3RelativeFilePath).toExternalForm();

более старые версии имели: s3Client.getResourceUrl(ведро, s3RelativeToBucketPath);

Ответ 2

Я использую aws-java-sdk-s3 1.11.58

принятый ответ не работает над этой версией.

ниже строка работает для этой версии

s3Client.getUrl(AWS_BUCKET, s3RelativeFilePath).toExternalForm();

Ответ 3

"https://"+{bucket}.s3.amazonaws.com+"/"+key

Этот URL-адрес может отличаться от ссылки в обзоре объектов в S3. Но он работает так же, как и тот же. Примечание. Ссылка в обзоре объектов обычно выглядит как

  https://s3-ap-southeast-2.amazonaws.com/{bucket}/{key}

Ответ 4

Для пользователей, у которых есть личные сегменты и которым требуется URL.

В моем случае мне нужно было получить загружаемую ссылку S3 Object на определенное время, так как мое ведро является частным.

Я использую Spring Cloud AWS, который под капотом использует AWS SDK для Java и предоставляет интерфейс AmazonS3 для взаимодействия с S3, используйте AmazonS3Client, если вы используете AWS SDK для JAVA вместо AmazonS3. Я просто ввел AmazonS3, и теперь я могу получить URL объекта, где бы он ни требовался, но его можно загрузить в течение 5 минут, иначе срок его действия истечет.

 public String getURL(String key) throws FileNotFoundException
{
    try {
        return amazonS3.generatePresignedUrl(BUCKET_NAME, key, new DateTime().plusMinutes(5).toDate()).toString();
    }
    catch (AmazonS3Exception exception){
        if(exception.getStatusCode() == 404){
            throw new FileNotFoundException(key);
        }
        else{
            throw exception;
        }
    }
}

Ответ 5

Подумайте о том, как построить url, используя имя ведра и ключ объекта, вместо того, чтобы каждый раз запрашивать s3, чтобы просто получить URL.

Ответ 6

Для версии SDK-2, Котлин:

s3.utilities().getUrl { it.bucket("BUCKET").key("FILEPATH") }.toExternalForm()

Ответ 7

Открытый URL-адрес - это просто имя объекта (ex my/object.txt), связанное с конечной точкой ведра (mybucket.s3.amazonaws.com), или если вы настроили его как веб-сайт, конечную точку сайта.

Когда вы загружаете объект в s3, вы на самом деле являетесь тем же самым спокойным api, с которым взаимодействуют ваши конечные пользователи; вы PUT объект, они GET it.

Ответ 8

" https://s3.amazonaws.com/" + bucketName + "/" + должен указывать URL-адрес объекта в s3