繁体   English   中英

以编程方式获取公共 S3 对象的 URL(链接)

[英]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();

参考 - https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Utilities.html#getUrl-java.util.function.Consumer-

旧版本有:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM