AmazonS3基本方法简述

AmazonS3方法简述

我们影像的方式现在修改为了文件服务器的方式存储,使用的是H3C的文件存储,但是没有给对应的说明文档,就是说和AmazonS3的方法一样,于是我们就直接面对开源开发了。

依赖
<dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <version>1.11.415</version>
        </dependency>

不是很确定到底会不会有别的依赖,但是至少是应该有这个

基本方法

首先在这里说一下,其实使用方法基本上就是增删改差了,其实对于文件服务器来说我认为增删查就可以了,改的话意义不是很大我认为,就写一下调用增删查的demo了,这个是demo所以大家看的时候业务逻辑自己带入就可以了,增删查,对应的文件服务器的方法就是文件上传,文件删除,文件下载。
首先呢这里有一个需要新建一个连接,新建连接需要元素,akey,skey,endpoint,这三个元素因为是付费服务所以不便于展示

新建连接
        String accessKey ="";
        String accessKey ="";
        String endpoint ="";
        AmazonS3ClientBuilder client = AmazonS3ClientBuilder.standard();
        ClientConfiguration config = new ClientConfiguration();
        config.setProtocol(com.amazonaws.Protocol.HTTPS);
        config.setConnectionTimeout(10001);
        config.setSignerOverride("S3SignerType");
        AWSCredentials acre = new BasicAWSCredentials(accessKey, secretKey);
        AWSCredentialsProvider acrep = new AWSStaticCredentialsProvider(acre);
        AwsClientBuilder.EndpointConfiguration econfig = new AwsClientBuilder.EndpointConfiguration(endpoint, null);

        client.setClientConfiguration(config);
        client.setCredentials(acrep);
        client.setEndpointConfiguration(econfig);
        AmazonS3 build = client.build();

因为保密所以accessKey ,accessKey ,endpoint 三个字段为空,但是你要是真的去使用的话千万不要写空的,经过这一段代码我们就产生了一个AmazonS3对象可以去进行代码的

文件上传
public static void shangchuan(AmazonS3 s3connt){
        try {

        String bucketname = "";
        String upload_key = "1231231235.log";
        File file = new File("logging.log");
        InputStream input = new FileInputStream(file);
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentLength(Long.valueOf(input.available()));
        objectMetadata.setContentType("plain/text");
        PutObjectResult putObjectResult = s3connt.putObject(bucketname, upload_key, input, objectMetadata);
        System.out.println(putObjectResult );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

其中bucketname 是桶名,也是一个AmazonS3的一个概念,好像是他们将空间分成一个一个的hash桶然后将文件存储在桶中,文件存储的时候调用的其中一个存储方法,其实存储方法不止一个,但是我在这边只写了这一个方式,putObject方法中需要将桶名传入,需要穿一个文件id,这个文件id是表名文件唯一性的唯一因素,这里只是demo所以我写死了,理论上来说这个应该是要UUID的,然后就是文件流,需要传入文件的文件流InputStream ,然后就是objectMetadata对象,按照我的代码中传递的参数传递一些参数即可。具体执行结果
在这里插入图片描述
这是本地代码执行结果的日期,我已经将敏感信息屏蔽了,然后可以看到上面是我发出的报文,下面是我收到的报文,具体的情况大概就是我将文件流等信息发了出去,然后上传成功报文返回200,然后文件已经成功上传了。

文件下载
    public static void xiazai(AmazonS3 s3connt){
        try {
        String bucketname = "";
        String upload_key = "1231231235.log";
        S3Object objData = s3connt.getObject(bucketname, upload_key);

        //需要import 对应的类,请注意
        S3ObjectInputStream s3ObjectInputStream = objData.getObjectContent();
        InputStream inputStream = new BufferedInputStream(s3ObjectInputStream);
        File file =new File("1.log");
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

上面就是文件下载的具体代码,getObject方法需要传递参数就是桶名和文件名,文件名是唯一的,使用BufferedInputStream类将返回的流转换成inputstream然后将流的内容导入到本地方法中。
在这里插入图片描述
屏蔽关键信息之后执行日志。

文件删除
String bucketname = "";
        String upload_key = "1231231235.log";
        s3connt.deleteObject(bucketname,upload_key);

deleteObject方法传入桶名和文件名即可实现删除方法,不过很尴尬的一件事就是没有办法可以直接看到删除的结果。在询问了对应人员之后,对方建议这样使用,首先先文件删除接口,删除一个不存在的文件名,查看删除不存在的文件名是否会报错,如果不报错,那我们在调用文件下载接口传入一个不存在的文件名,查看结果,然后删除接口先删除一个已经可以下载的文件,然后调用下载接口,看查看不存在文件名的下载情况和删除文件之后再将此文件下载的情况是否一致
首先验证删除一个不存在的文件名是否有不一样地方
在这里插入图片描述
倒是也有不一样的地方,可以看到返回的http状态码是204不是200,那我们在尝试一下执行成功的删除的日志
在这里插入图片描述

好了我比较了其实结果相差不大。
我们尝试下载一个不存在的文件名看看结果
在这里插入图片描述
结果提示404,这是没有这个文件下载文件之后的结果,我们在掉一下删除这个影像之后在调用下载接口之后的结果。
在这里插入图片描述
结果相差不多其实感觉,于是我们的删除接口已经测试完成了。
证明了我们的删除接口是成功的。
以上就是AmazonS3的基本使用方法介绍了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Spring Boot Amazon S3 是一个集成组件,它允许你在使用 Spring Boot 框架的 Java 应用程序中轻松地与 Amazon Simple Storage Service (S3) 集成。Amazon S3 是一种云存储服务,用于存储和检索大量的静态文件、应用程序数据或其他任何类型的数据。 在 Spring Boot 中集成 Amazon S3,你可以执行以下操作: 1. 添加依赖:在你的 `pom.xml` 或者 `build.gradle` 文件中添加 AWS SDK for Java 和 Spring Cloud AWS S3 的依赖。 ```xml <!-- Maven --> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-aws-s3</artifactId> </dependency> // Gradle implementation 'com.amazonaws:aws-java-sdk-s3' implementation 'org.springframework.cloud:spring-cloud-starter-aws-s3' ``` 2. 配置AWS凭证:你需要提供 AWS 密钥(ACCESS_KEY_ID)和秘密访问密钥(SECRET_ACCESS_KEY),或者设置环境变量(如 `AWS_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY`),以授权对 S3 的访问。 3. 创建 S3 实体和Repository:根据需要定义 S3 存储的对象模型,如 `S3Object` 或自定义实体,然后创建对应的 Repository 接口以支持 CRUD 操作。 4. 上传/下载文件:使用 Spring Boot 的 `@Autowired` 注解注入 S3Client 对象,然后调用其提供的方法来上传文件到 S3 或从 S3 下载文件。 5. 使用S3服务:Spring Cloud AWS S3 提供了诸如 `AmazonS3Operations` 或 `AmazonS3Client` 的便利类,可以直接用于执行常见的 S3 操作,如列出对象、删除对象等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又是重名了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值