如何使用URL和2.x Java SDK获取S3对象?

8ftvxx2r  于 2023-04-10  发布在  Java
关注(0)|答案(5)|浏览(148)

我正在使用2.x AWS Java SDK(https://docs.aws.amazon.com/sdk-for-java/index.html)。我需要使用友好的HTTP URL(例如https://bucket.s3.region.amazonaws.com/keyhttps://s3.region.amazonaws.com/bucket/key)获取S3对象。
旧版SDK包含一个AmazonS3URI类,可以解析URL并提取bucket和key。2.x SDK是否包含类似的功能,或者我应该使用Java的URI类来解析URL?

bt1cpqcv

bt1cpqcv1#

下面是我使用URI from java.net所做的:

URI uri = new URI(s3Url);

String bucketName = uri.getHost();

// remove the first "/"
String prefix = uri.getPath().substring(1);
luaexgnf

luaexgnf2#

目前还没有一种方法可以用SDK来实现,但是it might be available in the future。同时,您可以使用Java的URI类编写自己的代码,或者使用旧SDK中的AmazonS3URI,希望它能继续工作。

yc0p9oo0

yc0p9oo03#

如果你想要AmazonS3URI的所有功能,但不想导入整个库,你也可以复制源代码。
https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/AmazonS3URI.java

nsc4cvqm

nsc4cvqm4#

pull request将此功能添加到SDK版本2。

6fe3ivhb

6fe3ivhb5#

扩展@Bao Pham的答案,使用new URI(s3Url)需要添加try/catch,而如果您使用URI.create(s3 Url),则不需要它。我还发现在解析的部分中使用S3ObjectId以实现可重用性很有用。

public class S3Url {
    public static S3ObjectId decode(String urlStr) {
        URI uri = URI.create(urlStr);
        return new S3ObjectId(uri.getHost(), uri.getPath().substring(1));
    }
}

相关问题