java - Java AWS 开发工具包 S3。按元数据查找对象
问题描述
请告诉我一种通过用户元数据搜索对象的快速方法。我当前的方法需要大约 20 秒才能对 200 个对象的样本执行此操作。
public List<String> findObjectKeysByMetaKey(String metaKey, String keyValue) {
try {
ListObjectsV2Request request = new ListObjectsV2Request().withBucketName(bucketName);
ListObjectsV2Result result;
List<String> keys = new ArrayList<>();
do {
result = amazonS3Client.listObjectsV2(request);
keys.addAll(result
.getObjectSummaries()
.stream()
.map(S3ObjectSummary::getKey)
.filter(key -> keyValue.equals(getValueByMetaKey(bucketName, key, metaKey)))
.collect(Collectors.toList()));
request.setContinuationToken(result.getNextContinuationToken());
} while (result.isTruncated());
return keys;
} catch (S3Exception e) {
log.error("Exception when get keys by meta key {} with value {} from bucket {}. Message: {}",
metaKey, keyValue, bucketName, e.getMessage());
throw new S3ServiceException(
String.format("Exception when list all objects in bucket %s. Message: %s",
bucketName, e.getMessage()));
}
}
private String getValueByMetaKey(String bucket, String key, String metaKey) {
return amazonS3Client.getObjectMetadata(bucket, key).getUserMetadata().get(metaKey);
}
解决方案
推荐阅读
- javascript - 为什么不能设置null显示的属性innerhtml
- .net - 此主机上安装了哪个 .NET 版本?
- keras - 在 Keras 中,在模型中使用 Lambda 时无法保存模型检查点。报错 ValueError: can only convert a array of size 1 to a Python scalar
- jquery - 单击复选框时禁用和启用 Jquery Button
- java - Kotlin 生成私有字段:@MyAnnotation 字段不能是私有或静态的
- javascript - 如何处理从父 Promise 链返回的具有各种可能结果的 Promise
- sql - 如何在oracle sql developer中获取用户的FID
- javascript - 如何在运行时跟踪 DIV 的子元素计数?
- azure - ASP .Net 核心项目 CI\CD 在使用 DevOps 项目发布时失败
- drupal-8 - 如何在视图或钩子中没有提交的情况下获取网络表单标题和类别?