Java21 + SpringBoot3集成七牛云对象存储OSS,实现文件上传 ...

打印 上一主题 下一主题

主题 873|帖子 873|积分 2619

目录

前言

近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台系统,开发者基于此项目进行裁剪和扩展来完成自己的功能开发。本项目为前后端分离开发,后端基于Java21和SpringBoot3开发,后端使用Spring Security、JWT、Spring Data JPA等技术栈,前端提供了vue、angular、react、uniapp、微信小程序等多种脚手架工程。
项目地址:https://gitee.com/breezefaith/fast-alden
项目中使用七牛云对象存储Kodo作为云端文件存储中心,本文主要介绍如何在SpringBoot中集成七牛云OSS,并结合前端使用Element Plus库的Upload组件实现文件上传功能。
实现步骤

引入maven依赖

在pom.xml中引入七牛云及其相关依赖,本文还引入了lombok用于简化代码。
  1. <dependencies>
  2.   
  3.   <dependency>
  4.     <groupId>com.qiniu</groupId>
  5.     <artifactId>qiniu-java-sdk</artifactId>
  6.     <version>[7.13.0, 7.13.99]</version>
  7.   </dependency>
  8.   
  9.   <dependency>
  10.     <groupId>org.projectlombok</groupId>
  11.     <artifactId>lombok</artifactId>
  12.     <version>1.18.30</version>
  13.     <optional>true</optional>
  14.   </dependency>
  15. </dependencies>
复制代码
修改配置文件

在application.yml中可以自定义七牛云相关配置信息。
  1. fast-alden:
  2.   file:
  3.     oss:
  4.       qiniu:
  5.         access-key: *** # 请从七牛云工作台-个人中心-密钥管理获取
  6.         secret-key: *** # 请从七牛云工作台-个人中心-密钥管理获取
  7.         bucket: demo # 七牛云存储空间名称
  8.         directory: upload/ # 自定义存储空间内目录
  9.         domain: https://qiniu.demo.com/ # 存储空间自定义域名,请提前在存储空间中进行配置
复制代码
创建七牛云配置类
  1. /**
  2. * 七牛云OSS相关配置
  3. */
  4. @Configuration
  5. @ConfigurationProperties(prefix = "fast-alden.file.oss.qiniu")
  6. @Getter
  7. @Setter
  8. public class QiniuConfig {
  9.     /**
  10.      * AC
  11.      */
  12.     private String accessKey;
  13.     /**
  14.      * SC
  15.      */
  16.     private String secretKey;
  17.     /**
  18.      * 存储空间
  19.      */
  20.     private String bucket;
  21.     /**
  22.      * 上传目录
  23.      */
  24.     private String directory;
  25.     /**
  26.      * 访问域名
  27.      */
  28.     private String domain;
  29. }
复制代码
创建文件操作服务类

创建文件操作服务类接口。
  1. /**
  2. * 文件操作服务
  3. */
  4. public interface FileService {
  5.     /**
  6.      * 文件上传
  7.      *
  8.      * @param file 待上传的文件
  9.      * @return 访问该文件的url
  10.      * @throws IOException
  11.      */
  12.     String upload(MultipartFile file) throws IOException;
  13. }
复制代码
创建文件操作服务实现类,基于七牛云SDK实现。
  1. /**
  2. * 七牛云对象存储文件服务
  3. */
  4. @Service("fileService")
  5. public class QiniuFileServiceImpl implements FileService {
  6.     private final QiniuConfig qiniuConfig;
  7.     public QiniuFileServiceImpl(QiniuConfig qiniuConfig) {
  8.         this.qiniuConfig = qiniuConfig;
  9.     }
  10.     @Override
  11.     public String upload(MultipartFile file) throws IOException {
  12.         if (file.isEmpty()) {
  13.             throw new RuntimeException("文件是空的");
  14.         }
  15.         // 创建上传token
  16.         Auth auth = Auth.create(qiniuConfig.getAccessKey(), qiniuConfig.getSecretKey());
  17.         String upToken = auth.uploadToken(qiniuConfig.getBucket());
  18.         // 设置上传配置,Region要与存储空间所属的存储区域保持一致
  19.         Configuration cfg = new Configuration(Region.huadongZheJiang2());
  20.         // 创建上传管理器
  21.         UploadManager uploadManager = new UploadManager(cfg);
  22.         String originalFilename = file.getOriginalFilename();
  23.         // 构造文件目录和文件名
  24.         assert originalFilename != null;
  25.         String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
  26.         String fileKey = qiniuConfig.getDirectory() + UUID.randomUUID() + suffix;
  27.         // 上传文件
  28.         Response response = uploadManager.put(file.getInputStream(), fileKey, upToken, null, null);
  29.         // 返回文件url
  30.         return qiniuConfig.getDomain() + fileKey;
  31.     }
  32. }
复制代码
上述代码中有一行用到了Region.huadongZheJiang2(),此处要与自己的存储空间所属的存储区域保持一致,本文中所使用的存储空间属于华东-浙江2区域。
创建文件操作控制器
  1. @RestController
  2. @RequestMapping("/file")
  3. public class FileController {
  4.     private final FileService fileService;
  5.     public FileController(FileService fileService) {
  6.         this.fileService = fileService;
  7.     }
  8.     @PostMapping("/upload")
  9.     public String upload(MultipartFile multipartFile) throws IOException {
  10.         return fileService.upload(multipartFile);
  11.     }
  12. }
复制代码
前端实现

本工程前端基于Vue3组合式API开发,使用Element Plus作为UI库,借助Upload组件实现文件上传,本文在使用Upload组件时并没有直接使用其action属性,而是通过http-request和on-success属性实现了自定义的文件上传过程。
  1. <template>
  2.   <ElForm>
  3.     <ElFormItem>
  4.       <ElUpload action="" :http-request="uploadFile" :on-success="onUploadFileSuccess">
  5.         <ElButton type="primary">点击上传文件</ElButton>
  6.       </ElUpload>
  7.     </ElFormItem>
  8.   </ElForm>
  9. </template>
复制代码
运行效果


总结

本文主要介绍如何在SpringBoot中集成七牛云OSS,并结合前端使用Element Plus库的Upload组件实现文件上传功能。如有错误,还望批评指正。
在后续实践中我也是及时更新自己的学习心得和经验总结,希望与诸位看官一起进步。
出处:https://www.cnblogs.com/breezefaith/p/18005793本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表