首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Java检查给定的S3存储桶中是否存在指定的键

如何使用Java检查给定的S3存储桶中是否存在指定的键
EN

Stack Overflow用户
提问于 2011-11-29 06:04:59
回答 14查看 162.8K关注 0票数 101

我想使用Java检查给定的存储桶中是否存在密钥。我查看了API,但没有任何有用的方法。我试图使用getObject,但它抛出了一个异常。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2011-11-29 09:28:20

使用jets3t库。它比AWS sdk简单得多,健壮得多。使用这个库,您可以调用s3service.getObjectDetails()。这将只检查和检索对象的详细信息(而不是对象的内容)。如果对象丢失,它将抛出404。因此,您可以捕获该异常并在应用程序中处理它。

但为了使其正常工作,您需要为该存储桶上的用户提供ListBucket访问权限。仅仅是GetObject访问将不起作用。原因是,如果您没有ListBucket访问权限,亚马逊将阻止您检查密钥的存在。在某些情况下,仅仅知道密钥是否存在也足以满足恶意用户的需求。因此,除非他们拥有ListBucket访问权限,否则他们将无法这样做。

票数 1
EN

Stack Overflow用户

发布于 2016-04-16 01:06:46

现在,在官方Java API中有一个doesObjectExist方法。

享受吧!

票数 326
EN

Stack Overflow用户

发布于 2013-04-04 17:46:10

更新:

似乎有一个新的API来检查这一点。在这个页面中可以看到另一个答案:https://stackoverflow.com/a/36653034/435605

原文:

使用errorCode.equals("NoSuchKey")

代码语言:javascript
运行
复制
try {
    AmazonS3 s3 = new AmazonS3Client(new ClasspathPropertiesFileCredentialsProvider());
    String bucketName = getBucketName();
    s3.createBucket(bucketName);
    S3Object object = s3.getObject(bucketName, getKey());
} catch (AmazonServiceException e) {
    String errorCode = e.getErrorCode();
    if (!errorCode.equals("NoSuchKey")) {
        throw e;
    }
    Logger.getLogger(getClass()).debug("No such key!!!", e);
}

关于异常的注意事项:我知道异常不应该用于流控制。问题是Amazon没有提供任何api来检查这个流程--只是提供了关于异常的文档。

票数 60
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8303011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档