2017-09-14 36 views
1

我在我们的存储桶中有许多密钥(压缩)。如何从S3存储桶中获取最后一个X修改过的文件

我们只想从s3请求创建的最后一个X键。

我们使用Java API。但是,我找不到如何仅获取上次修改/创建的方法。

我们已经自行整理了列表,但仍然没有得到最后的X个项目。这是有问题的,因为这个桶可能很大,我们不想检索所有结果并对它们进行排序。

public List<MyObject> getResults(int numberOfResults) { 
     ObjectListing listing = s3Client.listObjects(new ListObjectsRequest() 
       .withBucketName(bucketName) 
       .withMaxKeys(numberOfResults)); 
     List<S3ObjectSummary> list = listing.getObjectSummaries(); 

// our internal sorting logic: 

     List<MyObject> myObjects = list.stream().map(item -> 
       MyObject.builder().resultKey(item.getKey()).createdDate(item.getLastModified()).build()).sorted(Comparator.comparing(MyObject::getCreatedDate)) 
       .collect(Collectors.toList()); 
     return myObjects; 
    } 

任何想法?

+0

文件如何更新和上传?它是否只能通过同一个Java应用程序? – mostafazh

回答

0

我认为Aws没有提供在服务器端做到这一点的方法。您可以使用客户端过滤。通过CLI,你可以这样做,如aws s3api list-objects --bucket bucketName --query "sort_by(keys,LastModified)"

+0

如果我做客户端过滤,如果我最终有很多文件,可能会出现内存不足,不是?我怎样才能通过java使用cli? – rayman

+0

您可以使用java ProcessBuilder调用CLI命令'ProcessBuilder pb = new ProcessBuilder(command); 进程p = pb.start(); InputStream is = p.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); ((line = br.readLine())!= null){System.out.println(line); }' –

相关问题