从Java/Spring向AWS S3发送文件时出错

从Java/Spring向AWS S3发送文件时出错,java,spring,amazon-s3,Java,Spring,Amazon S3,我正试图从Java/Spring应用程序向AWS S3发送一个文件,但我遇到了这个错误。我查了一下这个参数,在文件里什么也没找到。有人知道怎么修吗 提前谢谢你的帮助 Java方法 public void uploadS3(File file) throws IOException { AWSCredentials credentials = new BasicAWSCredentials(applicationProperties.getAwsAccessKey(),appli

我正试图从Java/Spring应用程序向AWS S3发送一个文件,但我遇到了这个错误。我查了一下这个参数,在文件里什么也没找到。有人知道怎么修吗

提前谢谢你的帮助

Java方法

    public void uploadS3(File file) throws IOException {

    AWSCredentials credentials = new BasicAWSCredentials(applicationProperties.getAwsAccessKey(),applicationProperties.getAwsAccessSecret());
    AmazonS3 s3 = AmazonS3ClientBuilder
        .standard()
        .withCredentials(new AWSStaticCredentialsProvider(credentials))
        .withRegion(Regions.EU_WEST_1)
        .build();

    String fileNameHash = buildNameHash(file.getOriginalFilename(), System.currentTimeMillis());
    String filename = fileNameHash+"."+ FilenameUtils.getExtension(file.getOriginalFilename());

    try {
        s3.putObject(applicationProperties.getAwsImageBucket(), filename, file);
    } catch (AmazonServiceException e) {
        log.error("[uploadS3] error: {}", e.getErrorMessage());
    }
}
错误:

org.springframework.web.util.NestedServletException:处理程序调度失败;嵌套异常为java.lang.NoSuchFieldError:签名\u名称 位于org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055) 位于org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) 位于org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) 位于org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)


在这种情况下,当异常与缺少字段或缺少类相关时,很可能意味着类路径上有多个AWS SDK版本。始终确保来自AWS SDK的不同依赖项的版本一致

为了使过程更简单,不要列出具有以下版本的所有依赖项:


亚马逊网站
aws-java-sdk-ec2
1.10.2
亚马逊网站
aws-java-sdk-s3
1.10.5
亚马逊网站
aws java sdk dynamodb
1.10.10
您可以在
dependencyManagement
部分中使用BOM(物料清单):


亚马逊网站
aws java sdk bom
1.10.10
聚甲醛
进口
亚马逊网站
aws-java-sdk-ec2
亚马逊网站
aws-java-sdk-s3
亚马逊网站
aws java sdk dynamodb

在这种情况下,当异常与缺少字段或缺少类相关时,很可能意味着类路径上有多个AWS SDK版本。始终确保来自AWS SDK的不同依赖项的版本一致

为了使过程更简单,不要列出具有以下版本的所有依赖项:


亚马逊网站
aws-java-sdk-ec2
1.10.2
亚马逊网站
aws-java-sdk-s3
1.10.5
亚马逊网站
aws java sdk dynamodb
1.10.10
您可以在
dependencyManagement
部分中使用BOM(物料清单):


亚马逊网站
aws java sdk bom
1.10.10
聚甲醛
进口
亚马逊网站
aws-java-sdk-ec2
亚马逊网站
aws-java-sdk-s3
亚马逊网站
aws java sdk dynamodb

您可以使用另一种方式将文件上传到S3,如下图所示

预签名的URL允许您向以下用户授予临时访问权限: 没有在您的帐户中直接运行AWS操作的权限。 预签名的URL使用您的凭据进行签名,可供使用 任何用户


这说明了如何使用这项技术

您可以使用另一种方式将文件上传到S3,如下图所示

预签名的URL允许您向以下用户授予临时访问权限: 没有在您的帐户中直接运行AWS操作的权限。 预签名的URL使用您的凭据进行签名,可供使用 任何用户


这说明了如何使用此技术

您是否认为您使用的所有AWS相关依赖项都具有相同的版本?你能发布完整的堆栈跟踪吗?使用sdk版本1.11。757@MaciejWalkowiak你是对的,相关依赖项的版本不对,我刚刚更改了,现在一切都正常了,谢谢。@Tanino我添加了完整的答案,这也说明了如何在将来避免此类问题。您是否起诉您使用的所有与AWS相关的依赖项都具有相同的版本?你能发布完整的堆栈跟踪吗?使用sdk版本1.11。757@MaciejWalkowiak你说得对,相关依赖项的版本不对,我只是更改了,现在一切都正常了,谢谢。@Tanino我添加了完整的答案,这也说明了如何避免将来出现此类问题。