这里是 Scala 2.11,虽然这涉及AWS S3 Java 客户端 API,所以这确实是一个 Java 问题。如果有人可以在 Scala 中提供答案,那就太棒了,但我很乐意接受任何有效的 Java 答案(我总是可以在自己的时间对其进行 Scala 化)。
我正在尝试使用 AWS S3 客户端库连接到 S3 上的存储桶,该存储桶是它下面的以下目录结构:
my-bucket/
3dj439fj9fj49j/
data.json
3eidi04d40d40d/
data.json
a874739sjsww93/
data.json
...
因此,存储桶下的每个直接子对象都是具有字母数字名称的目录。我将这些称为“ID 目录”。并且这些 ID 目录中的每一个都有一个名为的子对象data.json
。
我需要完成几件事:
- 我需要一个字符串数组/映射/数据结构(Java
Array<String>
或 ScalaArray[String]
),其中包含 ID 目录的所有字母数字 ID(因此元素 0 是"3dj439fj9fj49j"
,元素 1 是"3eidi04d40d40d"
,等等);和 - 我需要一个日期数组/映射/数据结构(Java
Array<Date>
或 ScalaArray[Date]
),其中包含每个 ID 目录对应文件的Last Modified时间戳。data.json
因此,如果mybucket/3dj439fj9fj49j/data.json
上次修改日期/时间戳为2017-05-29 11:19:24T,那么该日期时间将是第二个数组的第一个元素 - 这两个数组/映射/数据结构需要是关联的,这意味着我可以访问第一个(ID)数组的第 4 个元素并获取下面的第 5 个 ID 目录
my-bucket
,我还可以访问第二个(日期)的第 4 个元素) 数组并获取第 5 个 ID 目录的data.json
子对象的 Last Modified 时间戳
这些不一定是数组,它们可以是映射、元组等。如上所述,我只需要 1+ 个数据结构来保存此内容。
从lib 的 Javadocs我看到了一个ObjectMetadata#getLastModified
字段,但我没有看到任何用于读取给定父目录路径的内容S3Object
(即data.json
的父 ID 目录)。总而言之,我最好的尝试非常失败:
val s3Client = new AmazonS3Client(new BasicAWSCredentials(accessKey, secretKey))
val bucketRoot : S3Object = s3Client.getObject("myBucket","/")
// TODO: How to query 'bucketRoot' for all its child ID directories?
val idDirs : Array[S3Object] = ???
var dataMap : Map[String,Date] = null
idDirs.foreach(idDir ->
// TODO: getName() and getChildSomehow() don't exist...obviously
dataMap :+ idDir.getName() -> idDir.getChildSomehow("data.json").getObjectMetadata.getLastModified
)
那里有任何 S3 API 专家可以发现我哪里出错了,或者在这里将我推向正确的方向?提前致谢!