JAVA 整合 亚马逊AWS S3(文件上传,文件下载等)
创始人
2024-11-04 22:05:41
0

JAVA 整合 亚马逊AWS S3(文件上传,文件下载)

1.添加依赖

因为aws需要发送请求上传、下载等api,所以需要加上httpclient相关的依赖

		             software.amazon.awssdk             s3             1.12.198                               software.amazon.awssdk             s3-transfer-manager             2.20.26                               software.amazon.awssdk             kms                               software.amazon.awssdk             s3control           

2.配置AWS S3相关的信息

package com.ezfos.common.s3.config;  import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration;  @Data @Configuration @ConfigurationProperties(prefix = "aws.s3") public class AwzS3Config {     // 访问密钥     private String accessKey;     // 秘密密钥     private String secretKey;     // 存储桶名称     private String bucket;     // 区域     private String region;     // 前缀     private String prefix; } 

3.创建一个S3Client对象

S3Client是Amazon Web Services(AWS)的SDK中的一个类,用于与Amazon S3服务进行交互。该方法使用了@Bean注解,表示它是一个Spring框架中的Bean定义,可以被其他组件注入使用。在方法内部,

首先通过AwsBasicCredentials.create()方法创建了一个AwsBasicCredentials对象,该对象包含了访问AWS所需的凭证信息,包括访问密钥和秘密密钥。

然后,使用S3Client.builder()方法创建了一个S3Client对象的构建器,并设置了以下配置:

  • region(Region.of(awzS3Config.getRegion())):设置AWS的区域信息,从awzS3Config对象中获取区域值。
  • credentialsProvider(StaticCredentialsProvider.create(awsCreds)):设置凭证提供者,使用前面创建的AwsBasicCredentials对象作为凭证。

最后,调用build()方法构建并返回一个S3Client对象。

请注意,代码中有一行被注释掉的代码:endpointOverride(URI.create("https://xxxxx(桶名).s3.cn-northwest-1.amazonaws.com"))。这行代码用于指定自定义的S3端点URL,如果需要使用自定义的S3端点,可以取消注释并修改为正确的URL。

package com.ezfos.common.s3.config;  import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client;  import javax.annotation.Resource;  @Component @Configuration public class S3Config {     @Resource     private AwzS3Config awzS3Config;     @Bean     public S3Client s3client() {         AwsBasicCredentials awsCreds = AwsBasicCredentials.create(awzS3Config.getAccessKey(), awzS3Config.getSecretKey());         S3Client s3Client = S3Client.builder().                 region(Region.of(awzS3Config.getRegion())).                 credentialsProvider(StaticCredentialsProvider.create(awsCreds)).build(); //                endpointOverride(URI.create("https://xxxxx(桶名).s3.cn-northwest-1.amazonaws.com")).build();         return s3Client;     } } 

4.实现上传文件

 /**      * 上传文件      *      * @param file      * @param uploadKey      * @return      */     public boolean uploadToS3(MultipartFile file, String uploadKey) {             try {                 if (file == null) {                     return false;             }             //添加文件夹dev(文件夹其实就是一个前缀)             String prefix = awzS3Config.getPrefix();             String folderKey = prefix.concat(uploadKey);             PutObjectRequest putObjectRequest = PutObjectRequest.builder().bucket(awzS3Config.getBucket()).key(folderKey).contentType(file.getContentType()).build();             s3Client.putObject(putObjectRequest, RequestBody.fromBytes(file.getBytes()));             return true;         } catch (S3Exception | IOException e) {                 e.printStackTrace();             return false;         }     } 

5.实现下载文件

    /**      * 下载文件      *      * @param response      * @param downloadKey      * @return      * @throws IOException      */     public HttpServletResponse downloadFromS3(HttpServletResponse response, String downloadKey, String fileName) throws IOException {             // S3上存储的key         String keyName = awzS3Config.getPrefix().concat(downloadKey);         GetObjectRequest objectRequest = GetObjectRequest                 .builder()                 .key(keyName)                 .bucket(awzS3Config.getBucket())                 .build();         InputStream inputStream = null;         InputStream fis = null;         try {                 ResponseBytes objectBytes = s3Client.getObjectAsBytes(objectRequest);             inputStream = objectBytes.asInputStream();             // 取得文件的后缀名。             // 以流的形式下载文件。             fis = new BufferedInputStream(inputStream);             byte[] buffer = new byte[fis.available()];             fis.read(buffer);             fis.close();             // 清空response             response.reset();             // 设置response的Header             response.setCharacterEncoding("UTF-8");             //Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存             //attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3"             // filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称             response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"

相关内容

热门资讯

ia实测“微信金花链接版有房卡... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来享受...
一秒了解!”新财神房间卡房卡找... 一秒了解!”新财神房间卡房卡找谁谁购买“微信房卡充值 添加房卡批售商:微【113857776】复制到...
一分钟了解“金花链接房卡怎么创... 新西游牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
玩家攻略!”蛮王大厅房间卡房卡... 玩家攻略!”蛮王大厅房间卡房卡找谁谁购买“游戏中心打开微信,添加客服【113857776】,进入游戏...
ia实测“微信上玩炸金花充值方... 众乐大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡来...
实测教程!”新天道房间卡房卡找... 实测教程!”新天道房间卡房卡找谁谁购买“ 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服【11...
终于找到“金花房卡在哪里能弄到... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
实测分享!”新神皇在哪里买的”... 房卡是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:113857776许多玩家在游戏中会购买房卡来享...
一分钟了解“牛牛房卡购买渠道”... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享受...
实测分享!”九五至尊在哪里购买... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
秒懂百科!”拼三张在哪里买的”... 秒懂百科!”拼三张在哪里买的”房卡链接获取微信房卡充值 添加房卡批售商:微【113857776】复制...
一分钟了解“牛牛房卡哪里有卖的... 新世界牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
1分秒分析!”新长虹房间卡房卡... 1分秒分析!”新长虹房间卡房卡找谁谁购买“微信房卡充值 添加房卡批售商:微【113857776】复制...
终于找到“微信斗牛牛房卡使用教... 微信斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
一秒了解!”新鸿狐在哪里买的”... 一秒了解!”新鸿狐在哪里买的”房卡链接获取 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服【1...
一秒了解!”新详心在哪里买的”... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
正版授权“微信开金花群房卡到哪... 新漫游牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡...
实测教程!”新众乐在哪里能买炸... 房卡是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:113857776许多玩家在游戏中会购买房卡来享...
终于找到“牛牛链接房卡那里有,... 人皇大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡来...
Ai解析!”新下游在哪里买的”... Ai解析!”新下游在哪里买的”房卡链接获取 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服【1...