zoukankan      html  css  js  c++  java
  • java操作AWS S3一些坑记录

    1,aws sdk jar版本不一致问题

    一开始我在pom.xml中只配置了如下aws-java-sdk-s3

    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3 -->
    <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.506</version>
    </dependency>

    然后eclipse工程中如下截图,可以看到这3个jar版本不一致

    然后我直接执行下面的代码put 字符串和上传文件

     1 package com.hp.nova.common.tasksync.awss3;
     2 
     3 import java.io.File;
     4 import java.io.IOException;
     5 
     6 import com.amazonaws.AmazonServiceException;
     7 import com.amazonaws.SdkClientException;
     8 import com.amazonaws.auth.AWSCredentials;
     9 import com.amazonaws.auth.AWSStaticCredentialsProvider;
    10 import com.amazonaws.auth.BasicAWSCredentials;
    11 import com.amazonaws.auth.profile.ProfileCredentialsProvider;
    12 import com.amazonaws.services.s3.AmazonS3;
    13 import com.amazonaws.services.s3.AmazonS3ClientBuilder;
    14 import com.amazonaws.services.s3.model.ObjectMetadata;
    15 import com.amazonaws.services.s3.model.PutObjectRequest;
    16 
    17 public class UploadObject {
    18 
    19     public static void main(String[] args) throws IOException {
    20         String clientRegion = "cn-northwest-1";
    21         String bucketName = "nova-test";
    22         String stringObjKeyName = "novatestkey";
    23         String fileObjKeyName = "test.txt";
    24         String fileName = "C:/nova_work_document/test.txt";
    25 
    26         try {
    27             AWSCredentials awsCredentials = new BasicAWSCredentials("Access key ID", "Secret access key");
    28             AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
    29                     .withRegion(clientRegion)
    30                     .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
    31                     .build();
    32         
    33             // Upload a text string as a new object.
    34             s3Client.putObject(bucketName, stringObjKeyName, "Uploaded String Object");
    35             
    36             // Upload a file as a new object with ContentType and title specified.
    37             PutObjectRequest request = new PutObjectRequest(bucketName, fileObjKeyName, new File(fileName));
    38             ObjectMetadata metadata = new ObjectMetadata();
    39             metadata.setContentType("plain/text");
    40             metadata.addUserMetadata("x-amz-meta-title", "someTitle");
    41             request.setMetadata(metadata);
    42             s3Client.putObject(request);
    43         }
    44         catch(AmazonServiceException e) {
    45             // The call was transmitted successfully, but Amazon S3 couldn't process 
    46             // it, so it returned an error response.
    47             e.printStackTrace();
    48         }
    49         catch(SdkClientException e) {
    50             // Amazon S3 couldn't be contacted for a response, or the client
    51             // couldn't parse the response from Amazon S3.
    52             e.printStackTrace();
    53         }
    54     }
    55 }

    就会报错如下

    Exception in thread "main" java.lang.NoSuchFieldError: SIGNING_REGION
    at com.amazonaws.services.s3.AmazonS3Client.createRequest(AmazonS3Client.java:4654)
    at com.amazonaws.services.s3.AmazonS3Client.createRequest(AmazonS3Client.java:4630)
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1706)
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:3819)
    at com.hp.nova.common.tasksync.awss3.UploadObject111.main(UploadObject111.java:34)

    解决方法:

    在pom.xml中把如下都配置上

    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3 -->
    <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.506</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-kms -->
    <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-kms</artifactId>
    <version>1.11.506</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-core -->
    <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-core</artifactId>
    <version>1.11.506</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.amazonaws/jmespath-java -->
    <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>jmespath-java</artifactId>
    <version>1.11.506</version>
    </dependency>

     jar包的情况如下图

     

    然后执行就可以成功了

  • 相关阅读:
    [C# 基础知识系列]专题六:泛型基础篇——为什么引入泛型
    [C#基础知识系列]专题十七:深入理解动态类型
    [C# 基础知识系列]专题九: 深入理解泛型可变性
    C#网络编程系列文章索引
    [C#基础知识系列]专题十:全面解析可空类型
    [C# 基础知识系列]专题十一:匿名方法解析
    [C# 基础知识系列]专题十六:Linq介绍
    VSTO之旅系列(一):VSTO入门
    [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现
    [C# 网络编程系列]专题四:自定义Web浏览器
  • 原文地址:https://www.cnblogs.com/xiaohanlin/p/10451074.html
Copyright © 2011-2022 走看看