Amazon S3 的 java sdk简单使用

这篇具有很好参考价值的文章主要介绍了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文章来源地址https://www.toymoban.com/news/detail-780728.html

到了这里,关于Amazon S3 的 java sdk简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [ 云计算 | AWS 实践 ] 使用 Java 检查指定的密钥是否存在于给定的 Amazon S3 存储桶中

    本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【 云计算洞察 】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶

    2024年02月05日
    浏览(65)
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹

    本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【 云计算洞察 】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶

    2024年02月08日
    浏览(60)
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务

    本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【 云计算洞察 】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶

    2024年02月05日
    浏览(45)
  • Amazon S3 对象存储Java API操作记录(Minio与S3 SDK两种实现)

    今年(2023年) 2月的时候做了个适配Amazon S3对象存储接口的需求,由于4月份自学考试临近,一直在备考就拖着没总结记录下,开发联调过程中也出现过一些奇葩的问题,最近人刚从考试缓过来顺手记录一下。 Amazon S3(Simple Storage Service)对象存储出现得比较早且使用简单的RESTful

    2024年02月01日
    浏览(54)
  • [ 云计算 | AWS 实践 ] 使用 Java 列出存储桶中的所有 AWS S3 对象

    本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【 云计算洞察 】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶

    2024年02月06日
    浏览(53)
  • AWS——04篇(AWS之Amazon S3(云中可扩展存储)-02——EC2访问S3存储桶)

    关于AWS的前几篇入门文章,如下: AWS——01篇(AWS入门 以及 AWS之EC2实例及简单使用). AWS——02篇(AWS之服务存储EFS在Amazon EC2上的挂载——针对EC2进行托管文件存储). AWS——03篇(AWS之Amazon S3(云中可扩展存储)-01入门). 我这里使用的都是前面创建好的,关于怎么创建,请

    2024年02月13日
    浏览(46)
  • AWS——03篇(AWS之Amazon S3(云中可扩展存储)-01入门)

    关于AWS的其他入门,如下: AWS——01篇(AWS入门 以及 AWS之EC2实例及简单使用). AWS——02篇(AWS之服务存储EFS在Amazon EC2上的挂载——针对EC2进行托管文件存储). 2.1.1 简述 Amazon S3:从任意位置存储和检索任意数量的数据 Amazon S3 是一项对象存储服务,可提供业界领先的可扩展

    2024年02月14日
    浏览(47)
  • 【AWS】实操-保护 Amazon S3 VPC 终端节点通信

    数据安全至关重要。Amazon Web Services (AWS) 提供了多种解决方案和最佳实践来帮助保护数据的安全。了解如何做出最佳决策来保护数据的安全,这项任务可能具有挑战性。 在无路由指向互联网的私有子网中运行应用程序,可将攻击面限制为仅限内部流量,从而实现数据安全。

    2024年02月10日
    浏览(57)
  • 5、AWS SDK for Go-使用s3manager上传下载文件

    文档地址:传送门 上传和下载管理器可以分解大型对象,以便可以将它们分成多个部分并行传输。这使得恢复中断的传输变得容易。 S3 下载管理器确定文件是否可以拆分为更小的部分并并行下载。您可以自定义并行下载的数量和下载部分的大小。 S3 上传管理器确定文件是否

    2024年02月15日
    浏览(53)
  • AWS s3 使用教程,前后端Java+html开发教程

    目录 一、 AWS S3配置说明 1. S3 Bucket配置 1.1 ACL配置 1.2 存储桶策略配置 1.3 跨源资源共享配置 2. IAM配置 2.1 创建S3UploadPolicy策略 2.2 创建S3的Role 3. EC2配置 3.1 EC2添加role 二、S3 HTML+JAVA代码实现 三、AWS cloudfront 及Signed url 四、相关文档 S3 Bucket包括ACL配置、存储桶策略配置及跨源资

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包