Ответ 1
s3Client.getUrl(AWS_BUCKET, s3RelativeFilePath).toExternalForm();
более старые версии имели: s3Client.getResourceUrl(ведро, s3RelativeToBucketPath);
Я сохраняю один публичный объект в везде AWS S3 с использованием данного java API на моем сервере Теперь мне нужно вернуть общедоступный URL-адрес объекта S3 моему клиенту
До сих пор я не нашел никакого вызова API, который может вернуть общедоступный URL (или поле ссылки) объекта S3
Есть ли способ получить URL-адрес?
s3Client.getUrl(AWS_BUCKET, s3RelativeFilePath).toExternalForm();
более старые версии имели: s3Client.getResourceUrl(ведро, s3RelativeToBucketPath);
Я использую aws-java-sdk-s3 1.11.58
принятый ответ не работает над этой версией.
ниже строка работает для этой версии
s3Client.getUrl(AWS_BUCKET, s3RelativeFilePath).toExternalForm();
"https://"+{bucket}.s3.amazonaws.com+"/"+key
Этот URL-адрес может отличаться от ссылки в обзоре объектов в S3. Но он работает так же, как и тот же. Примечание. Ссылка в обзоре объектов обычно выглядит как
https://s3-ap-southeast-2.amazonaws.com/{bucket}/{key}
Для пользователей, у которых есть личные сегменты и которым требуется 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;
}
}
}
Подумайте о том, как построить url, используя имя ведра и ключ объекта, вместо того, чтобы каждый раз запрашивать s3, чтобы просто получить URL.
Для версии SDK-2, Котлин:
s3.utilities().getUrl { it.bucket("BUCKET").key("FILEPATH") }.toExternalForm()
Открытый URL-адрес - это просто имя объекта (ex my/object.txt
), связанное с конечной точкой ведра (mybucket.s3.amazonaws.com
), или если вы настроили его как веб-сайт, конечную точку сайта.
Когда вы загружаете объект в s3, вы на самом деле являетесь тем же самым спокойным api, с которым взаимодействуют ваши конечные пользователи; вы PUT
объект, они GET
it.
" https://s3.amazonaws.com/" + bucketName + "/" + должен указывать URL-адрес объекта в s3