Amazon S3 的 java sdk简单使用

Amazon S3 的 java sdk简单使用

在开发过程中基本都需要使用到对象存储技术。

对于一些国内的项目来说,可以使用阿里云,七牛云,京东云等开发平台进行开发对接存储对象。

而对于海外的项目,可能现有的国内技术无法使用,这时候就遇到了amazon这个平台了。在此只整理了其对接以及对象存储和验签预览对象的功能。

以下使用的是AWS SDK for Java2.x的开发工具包

详细使用请看:https://github.com/aws/aws-sdk-java-v2/#using-the-sdk

一、项目依赖导入

maven依赖管理

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>bom</artifactId>
            <version>2.17.100</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

选择需要的模块进行依赖

<dependencies>
    <!--amazon s3-->
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3</artifactId>
    </dependency>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>kms</artifactId>
    </dependency>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3control</artifactId>
    </dependency>
</dependencies>

整个SDK包(不建议使用此方式导入,有大量的不需要的模块):

<dependency>
  <groupId>software.amazon.awssdk</groupId>
  <artifactId>aws-sdk-java</artifactId>
  <version>2.17.100</version>
</dependency>

二、配置添加

nacos:

aws:
  s3:
    accessKey: xxxxxxxxxx
    secretKey: xxxxxxxxxx
    region: us-east-2 (选择s3控制台上的资源区域)
    bucket: xxx

配置类读取nacos的配置:

/**
 * @author Survivor
 * @create 2021/12/20 17:49
 */
@Configuration
public class AwsConfiguration {

    @Value("${aws.s3.accessKey}")
    private String accessKey;
    @Value("${aws.s3.secretKey}")
    private String secretKey;
    @Value("${aws.s3.region}")
    private String region;
    @Value("${aws.s3.bucket}")
    private String bucket;

    @Bean
    public void initAwConfiguration() {
        AwsUtils.setAccessKey(accessKey);
        AwsUtils.setSecretKey(secretKey);
        AwsUtils.setRegion(region);
        AwsUtils.setBucket(bucket);
    }
}

获取配置:

/**
 * @author Survivor
 * @create 2021/12/20 17:48
 */
@Slf4j
public class AwsUtils {

    private static String accessKey;
    private static String secretKey;
    private static String region;

    //  bucket
    private static String bucket;

    public static void setAccessKey(String accessKey) {
        AwsUtils.accessKey = accessKey;
    }

    public static void setSecretKey(String secretKey) {
        AwsUtils.secretKey = secretKey;
    }

    public static void setBucket(String bucket) {
        AwsUtils.bucket = bucket;
    }
    
    public static void setRegion(String region) {
        AwsUtils.region = region;
    }
}

三、使用aws的s3 SDK

  1. 获取s3对象
/**
 * 获取S3Client对象
 *
 * @return s3
 */
private static S3Client getAmazonS3() {
    return S3Client.builder()
            .credentialsProvider(getAwsCredentialsProviderChain())
            .region(Region.of(region))
            .build();
}

// 获取aws供应商凭据
private static AwsCredentialsProviderChain getAwsCredentialsProviderChain(){
    return AwsCredentialsProviderChain
        .builder()
        .addCredentialsProvider(new AwsCredentialsProvider() {
            @Override
            public AwsCredentials resolveCredentials() {
                return AwsBasicCredentials.create(accessKey, secretKey);
            }
        }).build();
}
  1. 对象存储
private static String putS3Object(S3Client s3, String bucketName, String objectKey, String objectPath) {
    try {
        String mimetype = Mimetypes.getInstance().getMimetype(new File(objectPath));
        PutObjectRequest putOb = PutObjectRequest.builder()
                .bucket(bucketName)
                .key(objectKey)
                .contentType(mimetype)
                .build();
        PutObjectResponse response = s3.putObject(putOb, RequestBody.fromBytes(getObjectFile(objectPath)));
        return response.eTag();
    } catch (S3Exception e) {
        System.err.println(e.getMessage());
        System.exit(1);
    }
    return "";
}

private static byte[] getObjectFile(String filePath) {
    FileInputStream fileInputStream = null;
    byte[] bytesArray = null;
    try {
        File file = new File(filePath);
        bytesArray = new byte[(int) file.length()];
        fileInputStream = new FileInputStream(file);
        fileInputStream.read(bytesArray);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fileInputStream != null) {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return bytesArray;
}

​ putS3Object()方法返回的字符串信息,就是上传后的存储key,如果你的存储的bucket不是私有的,可以直接拼接域名,直接访问bucket上的对象。但如果你的bucket是私有的,又想要访问其对象的话,就需要用到下面的验签获取:

对象获取

private static S3Presigner getS3Presigner() {
    return  S3Presigner.builder()
        .region(Region.of(region))
        .credentialsProvider(getAwsCredentialsProviderChain())
        .build();
}

/**
 * 预览 有效时间为1小时
 *
 * @param key
 * @return
 */
private static String preview(String bucketName, String key) {
    GetObjectRequest getObjectRequest =
        GetObjectRequest.builder()
        .bucket(bucketName)
        .key(key)
        .build();

    GetObjectPresignRequest getObjectPresignRequest =  GetObjectPresignRequest.builder()
        .signatureDuration(Duration.ofMinutes(60))
        .getObjectRequest(getObjectRequest)
        .build();

    PresignedGetObjectRequest presignedGetObjectRequest =
        getS3Presigner().presignGetObject(getObjectPresignRequest);

    return presignedGetObjectRequest.url().toString();
}

得到的是一串加上了验签参数的url路径,得到这个路径后就可以直接访问了。

这边只整理了小部分功能,其余的功能有需要的可以参考官方代码示例:https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/s3/src/main/java/com/example/s3

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: software.amazon.awssdk s3 api文档是Amazon Web Services的S3服务的官方API文档。该文档提供了详细的S3 API操作指南和使用示例,包括对象存储、桶(Bucket)管理、访问控制、CORS配置等方面的内容。 该文档主要面向S3服务的开发者,通过对API操作指南的阅读,开发者可以熟悉S3服务的基本操作和使用方式,从而能够更加高效地开发S3相关应用。 除了操作指南之外,该文档还提供了代码示例和API参考,方便开发者编写和调试S3应用程序。所有API都有详细的参数说明和使用示例,以及方法的返回值。 总之,software.amazon.awssdk s3 api文档是S3开发者必备的宝典之一,对于想要了解和掌握S3服务的开发者来说,这本文档会极大地提高他们的开发效率和成果。 ### 回答2: software.amazon.awssdk s3 api文档是AWS S3 SDK的官方文档,其中包括了S3 SDK中所有的API方法和参数说明,以及示例代码。AWS S3 SDKAmazon Web Services(AWS)提供的用于连接和操作AWS S3存储桶的软件开发工具包(SDK)。通过这个SDK,开发人员可以快速地将S3存储桶集成到他们的应用程序中,也可以在应用程序中增加对S3存储桶的功能。文档中描述了各种操作S3存储桶的API方法,如创建、读取、更新和删除存储桶、管理S3存储桶中的对象、设置存储桶权限等等。此外,文档还提供了详细的参数说明,让用户可以了解每个API方法的输入参数、返回参数、请求响应、异常处理等内容。对于想要使用AWS S3 SDK进行开发的用户,软件.amazon.awssdk s3 api文档是必备的参考资料,它能够帮助开发人员更好地了解S3 SDK使用,提高开发效率和开发成功率。 ### 回答3: Software.amazon.awssdk s3 api文档是亚马逊AWS Java 开发工具包中用于与亚马逊S3存储服务交互的应用程序接口(API)文档。该文档提供了详细的开发指南和API文档,帮助开发人员在Java语言下使用AWS S3服务。 该文档的开发指南分为三个部分,即入门、开发和高级。入门部分涵盖了如何设置开发环境、创建AWS S3存储桶以及基本的对象和桶操作。开发部分着重介绍了如何上传和下载大文件、实现上传和下载进度监控和使用加密功能。高级部分则进一步讲解了如何使用对象标记、复制对象和批量操作等高级应用。 在API文档部分,开发人员可以快速了解每个API的用途、入参和出参的具体信息,并可查看示例代码和错误代码,以便更好地理解和运用API。此外,文档还提供了完整的SDK参考文档和一些常见问题的解决方案。 总的来说,软件.amazon.awssdk s3 api文档提供了非常详细的开发指南和API文档,加上丰富的示例代码和SDK文档,极大地方便了开发人员在Java语言下使用AWS S3服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值