使用 Java 进行 AWS S3 文件搜索

2024-03-10

我们使用 java 类从 AWS s3 存储桶下载文件,代码如下

inputStream = AWSFileUtil.getInputStream(
            AWSConnectionUtil.getS3Object(null),
            "cdn.generalsentiment.com", filePath);

AWSFileUtil 是一个类,它检查凭证并使用 getInputStream 方法从 S3bucket 获取输入流。 filePath 是 cdn.generalsentiment.com 存储桶内的文件。

我们想要编写一个方法,它可以检查特定文件是否存在于 AWS S3 存储桶中,并返回一个布尔值或其他值。

请建议我解决这个问题。

public static boolean isValidFile(AmazonS3 s3,
        String bucketName,
        String path) throws AmazonClientException {
    try {
        ObjectMetadata objectMetadata =  
s3.getObjectMetadata("cdn.generalsentiment.com", path);
    } catch (NotFoundException nfe) {
        nfe.printStackTrace();
    }

    return true;
}

如果文件存在,则返回 true,否则抛出 NotFoundException,我想捕获该异常并将“isValidFile”方法结果返回为 false。 伙计们,方法体或返回类型的任何其他替代方案都会很棒。

更新后的那一张

public static boolean doesFileExist(AmazonS3 s3,
        String bucketName,
        String path) throws AmazonClientException,
        AmazonServiceException {
    boolean isValidFile = true;
    try {
        ObjectMetadata objectMetadata = 
s3.getObjectMetadata("cdn.generalsentiment.com", path);

    } catch (NotFoundException nfe) {
        isValidFile = false;
    }
   catch (Exception exception) {
        exception.printStackTrace();
        isValidFile = false;
    }
    return isValidFile;
}

大安的回答 https://stackoverflow.com/a/9429242/45773 using GET 存储桶(列表对象) http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGET.html(通过相应的包装器适用于 Java 的 AWS http://aws.amazon.com/sdkforjava/,见下文)是一次获取许多对象所需信息的最有效方法(+1),当然,您需要对响应进行相应的后期处理。

这可以通过以下方法之一最轻松地完成:类 AmazonS3Client http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html, e.g. listObjects(字符串存储桶名称) http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#listObjects%28java.lang.String%29:

AmazonS3 s3 = new AmazonS3Client(); // provide credentials, if need be
ObjectListing objectListing = s3.listObjects(new ListObjectsRequest()
        .withBucketName("cdn.generalsentiment.com");
for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
    System.out.println(objectSummary.getKey());
}

选择

如果您一次只对单个对象(文件)感兴趣,请使用头对象 http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectHEAD.html将会更加高效,因为您可以直接从相应的 HTTP 响应代码推断存在性(请参阅错误响应的详细信息 http://docs.amazonwebservices.com/AmazonS3/latest/API/ErrorResponses.html), i.e. 404 未找到 http://en.wikipedia.org/wiki/HTTP_404的回应NoSuchKey - 指定的键不存在.

同样,这最容易通过类 AmazonS3Client http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html,即getObjectMetadata(字符串存储桶名称, 字符串键) http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#getObjectMetadata%28java.lang.String,%20java.lang.String%29, e.g.:

public static boolean isValidFile(AmazonS3 s3,
        String bucketName,
        String path) throws AmazonClientException, AmazonServiceException {
    boolean isValidFile = true;
    try {
        ObjectMetadata objectMetadata = s3.getObjectMetadata(bucketName, path);
    } catch (AmazonS3Exception s3e) {
        if (s3e.getStatusCode() == 404) {
        // i.e. 404: NoSuchKey - The specified key does not exist
            isValidFile = false;
        }
        else {
            throw s3e;    // rethrow all S3 exceptions other than 404   
        }
    }

    return isValidFile;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 进行 AWS S3 文件搜索 的相关文章

  • 存根方法时出现 InvalidUseOfMatchersException

    我有这个 TestNG 测试方法代码 InjectMocks private FilmeService filmeService new FilmeServiceImpl Mock private FilmeDAO filmeDao Bef
  • AWS S3 上传的图像已损坏

    我正在 AWS ec2 ubuntu 机器上工作 我的代码在 cakephp 中 当我尝试将任何图像上传到 AWS S3 时 它都会损坏 虽然它在核心 php 代码中运行良好 这是我的控制器代码 if this gt User gt sav
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • 如何在 Spring 属性中进行算术运算?

  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • GWT 2.3 开发模式 - 托管模式 JSP 编译似乎不使用 java 1.5 兼容性

    无法编译 JSP 类 生成的 servlet 错误 DefaultMessage 上次更新 0 日期 中 0 时间 HH mm ss z 语法 错误 注释仅在源级别为 1 5 时可用 在尝试以开发模式在 Web 浏览器中打开我的 gwt 模
  • 使用架构注册表对 avro 消息进行 Spring 云合约测试

    我正在查看 spring 文档和 spring github 我可以看到一些非常基本的内容examples https github com spring cloud samples spring cloud contract sample
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 从 S3 提供 Django 的静态文件和媒体文件

    我遇到了一个奇怪的问题 我不知道是什么原因造成的 这是我当前的配置 使用Heroku MEDIA URL media STATIC URL static STATICFILES DIRS os path join PROJECT DIR s
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • kafka 连接 s3 源无法与 Minio 一起使用

    我已经验证了与 minio 的连接 确保凭据工作正常并且可以访问 minio 另外 如果我尝试任何其他值store url http minio 9000我无法保存配置 所以我猜想在可见性方面不存在问题卡夫卡连接容器和minio容器 我不确
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复

随机推荐

  • 接受字节数组,vb6 到 C# 互操作

    我正在做一个将 vb6 与加密包装器通信的应用程序 到目前为止 net 和互操作部分一切正常 完全正常工作 当我的客户正在测试它时 我有一个简单的问题 ComVisible true public SomeObjectComVisible
  • 重新加载网页后如何保留滚动位置? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 document ready function addmedic click function ses
  • XMPPFramework - 如何注册新用户帐户

    我正在尝试使用 XMPPFramework 连接到 Openfire 服务器并创建一个新的用户帐户 如果我已经以其他用户身份登录 此代码将创建一个新的用户帐户 NSXMLElement query NSXMLElement elementW
  • 手动将 UITabBar 添加到 UITableViewController

    我有一个标准应用程序 带有管理多个 UITableViewController 类的导航控制器 我想将 UITabBar 添加到根视图 UITableViewController 来管理过滤 UITableView 中显示的对象的选择 我不
  • 如何刷新表中的单行?

    是否可以刷新a的单行vaadin table成分 到目前为止 如果表行编辑完成 我只需刷新整个表 table refreshRowCache 但这可能会导致稍后的大型表出现性能问题 那么 如何刷新单行呢 我在 Vaadin 论坛上发现了这个
  • Array.delete(object) 从数据库中删除?

    所以我试图获取一系列不包含 post 的帖子 令我惊讶的是 下面的代码导致 post 被从数据库中删除 post Post find 2 posts Post where text gt title posts delete post 为什
  • Android onNewIntent() 通知未正确执行

    我有一个用于通知的广播接收器 我的应用程序是一个 webkit 我希望当用户单击通知时打开我的应用程序并定向到某个 URL 一切似乎都工作正常 但我现在遇到了问题 onNewIntent 如果用户上次通过按主页按钮退出应用程序 则调用此方法
  • 相机标定opencv

    你好 我正在做一个项目来进行图像 3D 重建 我正在校准相机的阶段 这需要很长时间才能完成 但是当我编译代码并在相机前显示棋盘时 它会直接进入未处理的异常错误 当图片不在框架中时 一旦进入框架就没有错误 出现未处理的错误我不知道为什么 我问
  • ActiveJob Deliver_later 不发送

    我有以下方法 UserMailer comment alert comment user type deliver later 奇怪的是 它与参数一起出现deliver now在 Rails 日志中 ActiveJob Enqueued A
  • 如何在 Kotlin DSL 中有条件地接受 Gradle 构建扫描插件服务条款?

    这基本上延伸了这个问题 https stackoverflow com q 52636622 1127485使用 Kotlin DSL 而不是 Groovy DSL 如何Groovy DSL 解决方案 https stackoverflow
  • 将 ASP.net Core 2.0 部署到 Azure

    我已通过以下步骤将 ASP net Core 1 1 应用程序升级到 ASP net Core 2 0 将目标框架更改为2 0 升级所有 Nuget 包 现在 我从 git 进行的自动部署运行并显示成功 但应用程序未运行 我收到以下错误 H
  • R,dplyr - group_by()和arrange()的组合不会产生预期的结果?

    使用 dplyr 函数时group by 紧接着arrange 我希望得到数据帧已排序的输出within我所说的组group by 我对文档的阅读是 这种组合应该产生这样的结果 但是当我尝试时 这不是我得到的 并且谷歌搜索并没有表明其他人遇
  • 将 Boost 适配器与 C++11 lambda 结合使用

    我尝试编译这段代码 include
  • 虚拟继承混乱

    我正在阅读有关继承的内容 并且有一个主要问题 我几个小时都无法解决 给定一个类Bar是一个类virtual功能 class Bar virtual void Cook 两者有什么不同 class Foo public Bar virtual
  • CollectionView 内的按钮不可点击

    我在集合视图的自定义单元格中有一个按钮 集合视图位于滚动视图上 由于某种原因 我无法单击该按钮 我已检查我的所有元素是否都启用了用户交互 Here is my layout of the collection I ve hidden som
  • XSLT:通过递增属性和值生成多个对象

    我有一个如下所示的 xml 我想复制 n 次 同时递增其元素之一和属性之一 XML 输入
  • 使用鼻子进行测试的 Python 导入 - 导入当前包之上的模块的最佳实践是什么

    这是一个经常以不同形式被问到的问题 并且经常得到 哈哈 你做得不对 的回答 很确定这是因为人们 包括我 尝试使用一个常识性场景作为实现 并且解决方案并不明显 如果您以前没有这样做过 会接受 让飞出瓶子 的答案 Given project i
  • 为什么Delete既是DDL又是DML语句

    我目前正在阅读 Microsoft 官方书籍 数据库管理基础知识 准备参加考试 我了解 DDL 和 DML 是什么 但 Microsoft 将 DELETE 显示为 DDL 和 DML 语句 我已经用谷歌搜索过这一点 但我无法证实或否认这一
  • 关于weak_ptr的线程安全性

    std shared ptr
  • 使用 Java 进行 AWS S3 文件搜索

    我们使用 java 类从 AWS s3 存储桶下载文件 代码如下 inputStream AWSFileUtil getInputStream AWSConnectionUtil getS3Object null cdn generalse