[英]Get URL(link) of a public S3 object programmatically
我在服务器中使用给定的 java API 在 AWS S3 存储桶中存储一个公共对象 现在我需要将 S3 对象的公共 URL 返回给我的客户端
直到现在我还没有找到任何可以返回 S3 对象的公共 URL(或链接字段)的 API 调用
有没有办法获取网址??
对于 Java SDK 2
s3Client.utilities().getUrl(builder -> builder.bucket(AWS_BUCKET).key(s3RelativeFilePath)).toExternalForm();
旧版本有:
s3Client.getResourceUrl(bucket, s3RelativeToBucketPath);
对于 SDK-2 版本,Kotlin:
s3.utilities().getUrl { it.bucket("BUCKET").key("FILEPATH") }.toExternalForm()
我正在使用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 对象的可下载链接,因为我的存储桶是private 。
我正在使用 Spring Cloud AWS,它在底层使用 AWS SDK For Java 并提供AmazonS3接口用于与 S3 交互,如果您使用的是 AWS SDK For JAVA 而不是AmazonS3 ,请使用AmazonS3Client 。 我只是注入了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。
" https://s3.amazonaws.com/ "+bucketName+"/"+key 应该为您提供 s3 中对象的 URL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.