当前位置: 首页 > 知识库问答 >
问题:

Amazon S3客户端无法连接

刘意
2023-03-14

我正在尝试连接到我的AWS S3存储桶,以便根据这些链接的说明上传文件。

http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpJava.html http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/credentials.html#credentials-指定提供者

出于某种原因,当它尝试实例化AmazonS3Client对象时,它抛出了一个被吞并的异常,并退出了我的Struts操作。因此,我没有太多的信息可以调试。

我尝试了使用默认凭证配置文件(~/.aws/credentials)方法和显式密钥和访问密钥(新的BasicAWSCredentials(access_key_id,secret_access_ key)

/**
 * Uses the secret key and access key to return an object for accessing AWS features
 * @return BasicAWSCredentials
 */
public static BasicAWSCredentials getAWSCredentials() {
    final Properties props = new Properties();
    try {
        props.load(Utils.class.getResourceAsStream("/somePropFile"));
        BasicAWSCredentials credObj = new BasicAWSCredentials(props.getProperty("accessKey"), 
                props.getProperty("secretKey"));
        return credObj;
    }  catch (IOException e) {
        log.error("getAWSCredentials IOException" + e.getMessage());
        return null;
    }
    catch (Exception e) {
        log.error("getAWSCredentials Exception: " + e.getMessage());
        e.printStackTrace();
        return null;
    }
}

********* 代码尝试S3访问 **********

try {
        AmazonS3 s3client = new AmazonS3Client(Utils.getAWSCredentials());
        //AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
        String fileKey = "catering/" + catering.getId() + fileUploadsFileName.get(i);

        System.out.println("Uploading a new object to S3 from a file\n");
        s3client.putObject(new PutObjectRequest(
                                                 Utils.getS3BucketName(), 
                                                 fileKey, file));
        // Save Attachment record
        Attachment newAttach = new Attachment();
        newAttach.setFile_key(fileKey);
        newAttach.setFilename(fileUploadsFileName.get(i));
        newAttach.setFiletype(fileUploadsContentType.get(i));
        newAttach = aDao.add(newAttach);

} catch (AmazonServiceException ase) {
        System.out.println("Caught an AmazonServiceException, which " +
                                "means your request made it " +
                                "to Amazon S3, but was rejected with an error response" +
                                " for some reason.");
        System.out.println("Error Message:    " + ase.getMessage());
        System.out.println("HTTP Status Code: " + ase.getStatusCode());
        System.out.println("AWS Error Code:   " + ase.getErrorCode());
        System.out.println("Error Type:       " + ase.getErrorType());
        System.out.println("Request ID:       " + ase.getRequestId());
        fileErrors.add(fileUploadsFileName.get(i));
    } catch (AmazonClientException ace) {
        System.out.println("Caught an AmazonClientException, which " +
                                "means the client encountered " +
                                "an internal error while trying to " +
                                "communicate with S3, " +
                                "such as not being able to access the network.");
        System.out.println("Error Message: " + ace.getMessage());
        fileErrors.add(fileUploadsFileName.get(i));
    } catch(Exception e) {
    System.out.println("Error Message: " + e.getMessage());
}

它永远不会超过亚马逊S3客户端=新的亚马逊S3客户端(Utils.getAWSCredentials()); 行。我已验证基本AWS证书对象是否包含正确的字段值。根据此信息,可能出了什么问题来阻止 S3 客户端连接?

** 编辑 **

我在生成的堆栈跟踪中发现了这个有用的信息:

org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(Thread.java:745)原因:java.lang.NoClassDefFoundError:无法初始化类com.amazonaws.ClientConfiguration在com.amazonaws.services.s3.AmazonS3Client。(AmazonS3Client.java:384)在gearup.actions.CateringController.assignAttachments(CateringController.java:176)在gearup.actions.CateringController.update(CateringController.java:135)

之前,我尝试了一个创建ClientConfiguration对象并将协议设置为HTTP的演示。然而,我遇到了一个问题:调用<code>new ClientConfiguration() 构造函数引发了NullPointerException。我是否遗漏了一些要求?

共有2个答案

郜彬
2023-03-14

这非常奇怪,因为< code>aws-java-sdk-s3明确依赖于< code>aws-java-sdk-core(参见< code>pom.xml)。这里有些可疑。< br >对我来说,事实证明这是apache httpclient版本的冲突(我的一个POM中的版本比amazon库使用的版本旧)。< br >我从其他人那里听说过类似的冲突,例如< code>jackson。

因此,对于这种情况中的任何人来说,我建议您在Eclipse中打开POM.xml时查看依赖关系层次结构(或使用mvn依赖项:树。有关详细信息,请参阅此处)。

此外,请检查 AWS 抛出的第一条错误消息。似乎它没有作为所有进一步堆栈跟踪中的原因链接,这只告诉你一些类似java.lang.NoClassDef发现错误:无法初始化类网站

卫彭亮
2023-03-14

看起来您的项目缺少一些依赖项。

您显然已经在项目中配置了< code>aws-java-sdk-s3 jar,因为它正在解析AmazonS3Client,但是这个jar也依赖于< code>aws-java-sdk-core。您需要将核心jar添加到您的类路径中。

 类似资料:
  • 我无法获取上一个已知位置。我已经在谷歌控制台中启用了地理编码API和谷歌地点API的Android。我在清单文件中添加了 API 密钥: 但我不断在控制台中收到一条消息:“无法连接到Google API客户端:连接结果{状态代码=API_UNAVAILABLE,分辨率=空}” 更新 我使用谷歌示例 onConnected和onConnectionFailed不调用。 而且我也使用Android反应

  • 问题内容: 一切工作正常,但问题是当我在地图上定位时什么都没发生我注册了我的谷歌地图,我在这里做了所有说明 http://code.google.com/intl/pl/android/add-ons/google- apis/mapkey.html 我可以看到地图,可以放大和缩小,但是当我搜索位置时,会在logcat中找到它 这是我的Java代码 有什么帮助吗?提前致谢 问题答案: 如果您在AP

  • 我正在尝试使用Spring Cloud项目实现文件上传到Amazon S3存储桶。 根据文件: “可以在应用程序代码中轻松创建com.amazonaws.services.s3.transfer.TransferManager,并将其注入已使用Spring Cloud AWS资源加载器配置创建的预配置的com.amazon.services.s3.AmazonS3客户端。” 但此示例代码不起作用:

  • 我有一个小程序,其方法从浏览器中的JavaScript函数调用。该方法最终将文件发送到AmazonS3 bucket。但是,当该方法尝试创建AmazonS3Client时,该方法失败,不会显示任何错误。 该方法中代码的相关代码片段是: try/catch块中的任何消息都不会打印。方法的其余代码(为简洁起见,此处未显示)也不会被触发。 jar文件编译无误。我用的是jdk 1.7.0_51和amazo

  • 我编写了一个简单的HBase客户端程序来在我的HBase集群(1个主服务器和3个区域服务器)中执行CRUD操作。Zookeeper实例仅在主服务器中运行,仲裁包括所有4台服务器。集群运行良好,可以使用YCSB客户端执行读/写操作(意味着服务器/Zookeeper端没有任何错误)。 现在,在eclipse类路径中,我添加了所有HBase库和hbase-0.94.7.jar(包含hbase-defau

  • 我有一个mongo db实例在linux系统中运行,我正试图从windows系统连接到它。当我启用身份验证时,我会不断获得 数据库“管理员”的凭据无效... 我的用户设置看起来像 显示用户{“_id”:“test.myuser”,“user”:“myuser”,“db”:“admin”,“roles”:[{“role”:“readWrite”,“db”:“admin”},{“role”:“user