将S3 URI解析为存储桶并键入Go

All*_*uce 0 amazon-s3 go aws-sdk

正式的AWS Go SDK中似乎没有一个函数可以解析s3://样式类似URI的字符串(即s3://mybucket/some/place/on/there.gz),并提供诸如bucket和key之类的东西。Java SDK 具有这样的功能。我是否缺少Go SDK不能提供的明显原因?

这个问题是关于保持兼容性的。SDK函数为如何正确解析S3地址提供了明确的权限,并避免了url.Parse()可能遗漏的细微情况。

Adr*_*ian 7

尽管只有AWS开发人员才能回答实际的问题(为什么SDK中未包含此问题),但还是有一个简单的答案:S3 URL是URL,您可以net/url用来解析它们:

u,_ := url.Parse("s3://mybucket/some/place/on/there.gz")
fmt.Printf("proto: %q, bucket: %q, key: %q", u.Scheme, u.Host, u.Path)
Run Code Online (Sandbox Code Playgroud)

这里的游乐场

  • **警告**:如果您这样做,请注意,它会在路径/键的开头给出一个斜杠 (/) 字符。如果您稍后尝试在“ListObjectsV2” API 调用中使用部分或全部“u.Path”值作为前缀,由于该斜杠,它将**失败**;您必须先将其删除,然后再将字符串发送回 AWS。 (3认同)