S3 URI 解析现已在适用于 Java 的 亚马逊云科技 开发工具包中提供 2.x

作者: David Ho |

适用于 Java 的 亚马逊云科技 开发工具包 团队很高兴地宣布,适用于 Java 的 亚马逊云科技 开发工具包 2. x 版中已正式推出 Amazon Simple Storage Service (Amazon S 3) URI 解析功能。 现在,您可以解析路径式和虚拟托管式的 S3 URI,以轻松检索存储桶、密钥、区域、样式和查询参数。 新的 parseUri () API 和 S3Uri 类提供了许多客户要求很高的解析功能,而适用于 Java 的 亚马逊云科技 开发工具包 1.x 却错过了这些功能。 请注意,不支持 亚马逊 S3 AccessPoints Amazon S3 上的 Outpost s URI 解析。

动机

用户经常需要从存储的 S3 URI 中提取存储分区和密钥等重要组件,以便在 S3 Client 操作中使用。新的解析 API 使用户可以方便地进行解析,无需手动解析或单独存储组件。

入门

首先,首先将 S3 的依赖项添加到您的项目中。

<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>s3</artifactId>
    <version>${s3.version}</version>
</dependency>

接下来,实例化 S3Client 和 S3Utilities 对象。

S3Client s3Client = S3Client.create();
S3Utilities s3Utilities = s3Client.utilities();

解析 S3 网址

要解析您的 S3 URI,请 从 S 3Utilities 中调用 pars eUri () ,传入 URI。这将返回一个解析过的 S3 Uri 对象。如果你有 URI 的 字符串,则需要先将其转换为 URI 对象。

String url = "https://s3.us-west-1.amazonaws.com/myBucket/resources/doc.txt?versionId=abc123&partNumber=77&partNumber=88";
URI uri = URI.create(url);
S3Uri s3Uri = s3Utilities.parseUri(uri);

使用 S3Uri ,您可以调用相应的 getter 方法来检索存储桶、密钥、区域、样式和查询参数。如果未在 URI 中指定存储桶、密钥或区域,则 将返回一个空的 Optional。如果未在 URI 中指定查询参数,则将返回一个空地图。如果该字段是在 URI 中编码的,则会将其解码后返回。

Region region = s3Uri.region().orElse(null); // Region.US_WEST_1
String bucket = s3Uri.bucket().orElse(null); // "myBucket"
String key = s3Uri.key().orElse(null); // "resources/doc.txt"
boolean isPathStyle = s3Uri.isPathStyle(); // true

检索查询参数

有几个 API 用于检索查询参数。您可以返回 查询参数的 Map 。或者,您可以指定查询参数来返回给定查询的第一个值,或者返回给定查询的值列表。

Map<String, List<String>> queryParams = s3Uri.rawQueryParameters(); // {versionId=["abc123"], partNumber=["77", "88"]}
String versionId = s3Uri.firstMatchingRawQueryParameter("versionId").orElse(null); // "abc123"
String partNumber = s3Uri.firstMatchingRawQueryParameter("partNumber").orElse(null); // "77"
List<String> partNumbers = s3Uri.firstMatchingRawQueryParameters("partNumber"); // ["77", "88"]

注意事项

特殊字符

如果您使用带有保留字符或不安全字符的对象键或查询参数,则必须对它们进行 URL 编码,例如,将空格 “” 替换 为 “%20”

有效:
“https://s3.us-west-1.amazonaws.com/myBucket/object%20key?query=%5Bbrackets%5D”

无效:
“https://s3.us-west-1.amazonaws.com/myBucket/object 密钥?query= [方括号]

虚拟托管风格 URI

如果您使用虚拟托管风格 URI,其存储桶名称包含一个点,即 “.” ,该点不得采用 URL 编码。

有效:
“https://my.Bucket.s3.us-west-1.amazonaws.com/key”

无效:
“https://my%2EBucket.s3.us-west-1.amazonaws.com/key”

结论

在这篇文章中,我讨论了在适用于 Java 2.x 的 亚马逊云科技 开发工具包中解析 S3 URI,并提供了检索存储桶、密钥、区域、样式和查询参数的代码示例。要了解有关如何设置和开始使用该功能的更多信息,请访问我们的 开发者指南 。如果你想知道它是如何实现的,可以查看 GitHub 上的 源代码 。与往常一样,适用于 Java 的 亚马逊云科技 开发工具包团队欢迎在 a ws-sdk-java- v2 GitHub 存储库上提交错误报告、功能请求和拉取请求。