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

Spring Cloud AWS-AmazonS3客户端始终为空

关玄裳
2023-03-14

我正在尝试使用Spring Cloud项目实现文件上传到Amazon S3存储桶。

根据文件:

“可以在应用程序代码中轻松创建com.amazonaws.services.s3.transfer.TransferManager,并将其注入已使用Spring Cloud AWS资源加载器配置创建的预配置的com.amazon.services.s3.AmazonS3客户端。”

但此示例代码不起作用:

public class SimpleResourceLoadingBean {

@Autowired
private AmazonS3 amazonS3;

public void withTransferManager() {
    TransferManager transferManager = new TransferManager(this.amazonS3);
    transferManager.upload("myBucket","filename",new File("someFile"));
}

}

amazonS3变量始终为空。

我的Spring上下文配置如下:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:aws-context="http://www.springframework.org/schema/cloud/aws/context" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd 
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd 
http://www.springframework.org/schema/cloud/aws/context
http://www.springframework.org/schema/cloud/spring-cloud-aws-context.xsd">

<aws-context:context-credentials>
 <aws-context:simple-credentials access-key="KEY" secret-key="SECRET" />
</aws-context:context-credentials>

<aws-context:context-region region="eu-central-1"/>

<aws-context:context-resource-loader/>

<bean id="awsTransferManager" class="mytest.cloud.aws.AwsTransferManager" />

我使用这个类进行测试:

public class AwsTransferManager {

@Autowired
private AmazonS3 amazonS3;

public void upload() throws AmazonServiceException, AmazonClientException, InterruptedException {
    TransferManager tx = new TransferManager(amazonS3);
    System.out.println(amazonS3); //always null
}

测试:

@Test
public void awsTest() throws Exception {
    ApplicationContext cxt = new ClassPathXmlApplicationContext("META-INF/spring/spring-context.xml");
    AwsTransferManager manager = (AwsTransferManager)getContext().getBean("awsTransferManager");
    manager.upload();
}

共有1个答案

石正信
2023-03-14

好吧,我知道了,我错过了

<context:annotation-config />

在我的spring配置中。

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

  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • 下面是片段。请注意,我已经恢复到以前的提交,因此丢失了最近的修改,但请查看我编写的代码,然后才注意到始终等于0() 以下是当检测到活动后按: 以下是NoteActivity接收结果调用的方式。 null 我在我的项目上浪费了很多重要的时间,只是想知道是什么使resultCode和requestCode的值丢失了我发送的值。 任何帮助和指导都将不胜感激。非常感谢!

  • 我只使用JavaScript,不使用任何服务器端代码,通过REST API实现了从客户机到AmazonS3的直接文件上载。一切正常但有一件事让我担心... 当我向AmazonS3 REST API发送请求时,我需要对请求进行签名,并将签名放入头中。要创建签名,我必须使用我的密钥。但是所有的事情都发生在客户端,所以,秘密密钥可以很容易地从页面源(即使我混淆/加密我的源)泄露出来。 我该怎么处理?这真

  • URI 方法 URI() string 返回当前客户端使用的服务器地址。 SetURI 方法 SetURI(uri string) 设置当前客户端使用的服务器地址。如果你想要设置多个服务器地址,请使用 SetURIList 方法代替该方法。 URIList 方法 URIList() []string 返回当前客户端可使用的服务器地址列表。 SetURIList 方法 SetURIList(uriL

  • 客户端事件通过 SetEvent 方法进行设置。 客户端事件有两个,它们分别定义为: type onErrorEvent interface { OnError(name string, err error) }   type onFailswitchEvent interface { OnFailswitch(Client) } 因为 go 语言不需要显式实现接口的特点,所以这两