Springboot整合OSS并实现文件上传和下载

news/2024/11/20 7:32:43/

目录

一.OSS服务器开通并创建账户

二.Springboot整合OSS

1.创建springboot项目

2.整合OSS

三.postman测试


一.OSS服务器开通并创建账户

参考阿里云OSS的使用(全程请登陆)_zhz小白的博客-CSDN博客icon-default.png?t=N4P3https://blog.csdn.net/zhouhengzhe/article/details/112077301

二.Springboot整合OSS

1.创建springboot项目

1.1勾选web依赖

 

注意:如果jdk版本为1.8,则springboot版本应该为3.0以下

1.2 引入相关依赖

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><scope>compile</scope></dependency>

2.整合OSS

2.1启动文件配置

server:port: 8080
spring:application:name: oss-server
aliyun: oss:end-point: oss-cn-chengdu.aliyuncs.comaccess-key-id: LTAI5tCNDUQeX9PtAv9nZmMfaccess-key-secret: KGVGWz2H9yyrogOilJ4K1dgr8EX7Xhbucket-name: oss-test-cheng

2.2 OSS配置类OSSConfig

@Configuration
@Data
@ConfigurationProperties(prefix = "aliyun.oss")
public class OSSConfig {private String endPoint;private String accessKeyId;private String accessKeySecret;private String bucketName;
}

2.3 服务层代码

public interface FileService {String upload(MultipartFile file) throws IOException;void download() throws IOException;
}
@Service
@Slf4j
public class FileServiceImpl implements FileService {@Autowiredprivate OSSConfig ossConfig;@Overridepublic String upload(MultipartFile file) throws IOException {String endPoint = ossConfig.getEndPoint();String accessKeyId = ossConfig.getAccessKeyId();String accessKeySecret = ossConfig.getAccessKeySecret();String bucketName = ossConfig.getBucketName();//创建oss对象OSS oss = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);String originalFilename = file.getOriginalFilename();//设置日期格式LocalDateTime now = LocalDateTime.now();DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");String date = dateTimeFormatter.format(now);//拼装oss文件的存储路径String fileName= UUID.randomUUID().toString().replaceAll("-", "").substring(0, 32);String extension=originalFilename.substring(originalFilename.lastIndexOf("."));//在oss上bucket下的文件路径String uploadFileName = "user/" + date + "/" + fileName + extension;PutObjectResult putObjectResult = oss.putObject(bucketName, uploadFileName,  file.getInputStream());if (putObjectResult!=null){log.info("文件上传成功");return "https://"+bucketName+"."+endPoint+"/"+uploadFileName;}else {log.info("文件上传失败");}oss.shutdown();return null;}@Overridepublic void download() throws IOException {String endPoint = ossConfig.getEndPoint();String accessKeyId = ossConfig.getAccessKeyId();String accessKeySecret = ossConfig.getAccessKeySecret();String bucketName = ossConfig.getBucketName();OSS oss = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);//获取OSS端的文件OSSObject result = oss.getObject(bucketName, "235920pM89Q.jpg");//创建输入流BufferedInputStream inputStream = new BufferedInputStream(result.getObjectContent(), 512);String[] split = result.getKey().split("/");String fileName = split[split.length - 1];//创建输出流FileOutputStream outputStream= new FileOutputStream("C:\\Users\\13404\\Pictures\\Camera Roll\\write.jpg");//处理oss文件流传输int number;/**/byte[] buffer = new byte[512];while ((number = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, number);}outputStream.flush();outputStream.close();inputStream.close();log.info("下载完毕");}
}

2.4 控制层代码

@RestController
@Slf4j
@RequestMapping("/file")
public class FileController {@Autowiredprivate FileService fileService;@PostMapping("/upload")public Map<String,Object> upload(@RequestParam("file") MultipartFile file) throws IOException {String upload = fileService.upload(file);Map<String, Object> result = new HashMap<>();if(upload== null || "".equals(upload)){result.put("code",10000);result.put("msg","图片上传失败");result.put("data",null);}else{result.put("code",200);result.put("msg","图片上传成功");result.put("data",upload);}return result;}@GetMapping("/download")public void download() throws IOException {fileService.download();}}

三.postman测试

upload测试参数设置如下:

结果:

 

 download测试:这里我上传和下载的不是一张图片

 结果:

 


http://www.ppmy.cn/news/103559.html

相关文章

Zookeeper+消息队列Kafka

一、Zookeeper 概述 官方下载地址&#xff1a;Index of /dist/zookeeper 1.1 Zookeeper 定义 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 1.2 Zookeeper 工作机制 Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设…

Spring Cloud介绍(一)

1、Spring Cloud的产生 Spring Cloud是一系列框架的有序集合。它利用 Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线线、负载均衠、断路器、数据监控等,都可以用 Spring Boot的开发风格做到一键启动和部署。 Spring并没有…

2023-05-29 Unity 2进制5——Excel配置表工具

文章目录 一、Excel 读取操作&#xff08;一&#xff09;打开 Excel 表&#xff08;二&#xff09;获取单元格信息 二、Excel 表配置工具&#xff08;一&#xff09;基础知识&#xff08;二&#xff09;配置工具 一、Excel 读取操作 &#xff08;一&#xff09;打开 Excel 表 …

中国人民大学与加拿大女王大学金融硕士——每天都要优于过去的自己,加油!

职场中拉开人与人之间差距的&#xff0c;往往是日复一日微小的积累。满足已取得的成就会让人停滞不前&#xff0c;一旦停止学习&#xff0c;人就会止步不前。懂得持续学习、终生成长的人&#xff0c;能保持积极进取的状态。金融行业的你有计划来人民大学与加拿大女王大学金融硕…

【MySql】InnoDB一棵B+树可以存放多少行数据?

文章目录 背景一、怎么得到InnoDB主键索引B树的高度&#xff1f;二、小结三、最后回顾一道面试题总结参考资料 背景 InnoDB一棵B树可以存放多少行数据&#xff1f;这个问题的简单回答是&#xff1a;约2千万。为什么是这么多呢&#xff1f;因为这是可以算出来的&#xff0c;要搞…

【云原生|探索 Kubernetes 系列 6】从 0 到 1,轻松搭建完整的 Kubernetes 集群

前言 大家好&#xff0c;我是秋意零。 前面一篇中&#xff0c;我们介绍了 kubeadm 的工作流程。那么今天我们就实际操作一下&#xff0c;探索如何快速、高效地从 0 开始搭建一个完整的 Kubernetes 集群&#xff0c;让你轻松驾驭容器化技术的力量&#xff01;&#xff01; &am…

代码随想录补打卡 583两个字符串的删除操作 72 编辑距离

583两个字符串的删除操作 代码如下 func minDistance(word1 string, word2 string) int { dp[i][j]的含义是下标为i-1和下标为j-1的两个数组的最小操作数 dp : make([][]int,len(word1)1) for i,_ : range dp { dp[i] make([]int,len(word2)1) } for i : 0 ; i < len(…

0day工具集(资源)介绍-0day漏洞利用原理(2)

往期文章: 漏洞概述-0day漏洞利用原理(0)_luozhonghua2000的博客-CSDN博客 二进制概述-0day漏洞利用原理(1)_luozhonghua2000的博客-CSDN博客 上篇已介绍了Lord PE这篇集中必要的工具。 OllyDbg 推荐:OllyDBG完美教程(超强入门级)_「已注销」的博客-CSDN博客 OD使用教…