亚马逊云科技精选博客
我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
S3 URI 解析现已在适用于 Java 的 亚马逊云科技 开发工具包中提供 2.x
parseUri ()
API 和
S3Uri
类提供了许多客户要求很高的解析功能,而适用于 Java 的 亚马逊云科技 开发工具包 1.x 却错过了这些功能。
动机
用户经常需要从存储的 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,并提供了检索存储桶、密钥、区域、样式和查询参数的代码示例。要了解有关如何设置和开始使用该功能的更多信息,请访问我们的