MinIO实现简单文件上传【springboot】

devtools/2024/10/20 16:57:53/

文章目录

  • 引入相关依赖
  • 配置application.yml文件
  • 编写minio的config文件
  • 编写minio的工具类
  • 图片文件上传测试


引入相关依赖

javascript">  <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.6</version></dependency>

如果出现报错:

Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location
io.minio.S3Base.(S3Base.java:105)
The following method did not exist:okhttp3.RequestBody.create([BLokhttp3/MediaType,)Lokhttp3/RequestBody,

  • 依赖冲突问题请参考这篇博客:springboot项目启动报错

配置application.yml文件

在application.yml种添加minio配置,注意yml文件的格式

javascript">minio:config:url: http://127.0.0.1:9005 #ip地址accessKey: name #  账号secretKey: password #  密码secure: false #如果是true,则用的是https而不是http,默认值是truebucketName: "studyphoto-oss"  # 自己bucket桶的名字 相当于文件夹

编写minio的config文件

在这里插入图片描述

javascript">//导包
import io.minio.MinioClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Data
@Configuration
@ConfigurationProperties(prefix = "minio.config")
public class MinioConfig {/*** 服务地址*/private String url;/*** 用户名*/private String accessKey;/*** 密码*/private String secretKey;/*** 存储桶名称*/private String bucketName;@Beanpublic MinioClient getMinioClient() {return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();}
}

编写minio的工具类

为了方便开发,将minio的操作封装为一个工具类
在这里插入图片描述

javascript">//导包import com.wedu.config.MinioConfig;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.StatObjectArgs;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;/****/
@Component
public class MinioUtils {/*** minio进行文件上传的注入工作* @param minioConfig* @param client :用于与MinIO服务进行交互,执行对象的存储操作(文件的上传、下载、删除等)*/// 注入minio配置文件@Autowiredprivate MinioConfig minioConfig;// 注入minio client@Autowiredprivate MinioClient client;/*** 文件上传minio* @param originalFilename* @param file* @return*/public String upload(String originalFilename, MultipartFile file) {String url="";// 获取文件的扩展名 例如.jpg .docString extname = originalFilename.substring(originalFilename.lastIndexOf("."));// 构建文件上传相关信息PutObjectArgs args = null;try {args = PutObjectArgs.builder()// 构建上传文件信息.bucket(minioConfig.getBucketName())//设置桶名.object(originalFilename)//设置文件名.stream(file.getInputStream(), file.getSize(), -1)//设置上传流.contentType(file.getContentType())//设置文件类型.build();// 将文件上传到minio服务器client.putObject(args);} catch (Exception e){e.printStackTrace();}// 组装文件信息,返回前端 或者存入数据路// 文件访问路径: http://127.0.0.1:9005/bucketName/objectNameurl = minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + originalFilename;return url;}/*** 判断文件是否存在* @param originalFilename* @return true存在*/public Boolean checkFileIsExist(String originalFilename) {try {client.statObject(StatObjectArgs.builder().bucket(minioConfig.getBucketName()).object(originalFilename).build());} catch (Exception e) {
//            e.printStackTrace();return false;}return true;}/*** 获取文件访问路径* @param originalFilename* @return*/public String getFileUrl(String originalFilename){return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + originalFilename;}
}

其余操作(文件删除等 )可参考这篇博客:Minio工具类

图片文件上传测试

  • 控制层:SysUserController.java
javascript">@Autowiredprivate SysUserService sysUserService;/***  上传头像* @param file* @return 返回图片的访问路径* @throws IOException*/@PostMapping("upload")public R upload(@RequestParam("file") MultipartFile file) throws IOException {SysUserEntity user = getUser();//获取当前登录用户String url=sysUserService.uploadAvatar(file,user);return R.ok().put("url",url);}
  • Service层接口
javascript">/*** 上传头像* @param file* @param user* @return 返回图片的访问路径*/String uploadAvatar(MultipartFile file, SysUserEntity user);
  • Service层实现类

注意一定要注入minio的工具类

javascript">@Autowiredprivate MinioUtils minioUtils;//注入minio工具类/*** 上传头像* @param file* @param user* @return 返回图片的访问路径*/@Overridepublic String uploadAvatar(MultipartFile file, SysUserEntity user) {String url="";try {// 获取文件真实名称String originalFilename = file.getOriginalFilename();// 判断文件是否已经存在 不存在才进行上传和存储数据库操作if(!minioUtils.checkFileIsExist(originalFilename)){url = minioUtils.upload(originalFilename, file);user.setAvatar(url);// 更新用户头像url地址this.update(user);// 更新数据库中用户头像url地址}else {url=minioUtils.getFileUrl(originalFilename);}} catch (Exception e) {
//			throw new ServerException("文件上传异常" + e.getCause().toString());
//			try {
//				throw new ServerException("文件上传异常" + e.getCause().toString(),1,null);
//			} catch (ServerException ex) {
//				ex.printStackTrace();
//			}}return url;}

http://www.ppmy.cn/devtools/32440.html

相关文章

【JavaEE】多线程安全问题

文章目录 1、什么是多线程安全问题2、出现线程不安全的原因2.1 线程在系统中是随机调度&#xff0c;抢占式执行的2.2 多个线程同时修改同一个变量2.3 线程针对变量的修改操作&#xff0c;不是“原子”的2.4 内存可见性问题2.5 指令重排序 3 、如何解决线程安全问题3.1 锁操作3.…

从零开始学AI绘画,万字Stable Diffusion终极教程(二)

【第2期】关键词 欢迎来到SD的终极教程&#xff0c;这是我们的第二节课 这套课程分为六节课&#xff0c;会系统性的介绍sd的全部功能&#xff0c;让你打下坚实牢靠的基础 1.SD入门 2.关键词 3.Lora模型 4.图生图 5.controlnet 6.知识补充 在第一节课里面&#xff0c;我们…

第19章 基于质量特性的测试技术

一、功能性测试 &#xff08;一&#xff09;测试方法 等价类边界值法因果图法判定表法场景法 &#xff08;二&#xff09;用例 1、正常用例 2、异常用例 &#xff08;三&#xff09;完备性 1、功能覆盖率 2、X1-A/B 功能覆盖率X&#xff1a;软件实际功能覆盖文档中所有…

Ubuntu Linux完全入门视频教程

Ubuntu Linux完全入门视频教程 UbuntuLinux完全入门视频教程1.rar UbuntuLinux亮全入门视频教程10.ra UbuntuLinux亮全入门视频教程11.ra UbuntuLinux完全入门视频教程12.ra UbuntuLinux亮全入门视频教程13.ra UbuntuLinux完全入门视频教程14.rar UbuntuLinux完全入门视频教程…

面试 Java 基础八股文十问十答第二十六期

面试 Java 基础八股文十问十答第二十六期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;你觉得 Java 好在哪…

高扬程水泵的性能与应用领域 /恒峰智慧科技

在现代社会中&#xff0c;科技的发展为我们的生活带来了无数便利和可能性。其中&#xff0c;高扬程水泵作为一种高效能的水泵&#xff0c;其独特的设计使其在各个领域都有着广泛的应用&#xff0c;尤其是在森林消防中。 一、高扬程水泵的性能 1. 高扬程&#xff1a;高扬程水泵…

vue3+vite+js axios引用

先交代下基础版本&#xff1a; “node”&#xff1a;“V16.14.1” “vue”: “^3.4.21” “vite”: “^5.2.0” 安装&#xff1a;npm install axios --save在src目录下的utils文件夹创建一个request.js文件&#xff08;示例代码&#xff0c;仅供参考&#xff09;: //引入axio…

【综述】多核处理器芯片

文章目录 前言 Infineon处理器 AURIX™系列 TC399XX-256F300S 典型应用 开发工具 参考资料 前言 见《【综述】DSP处理器芯片》 Infineon处理器 AURIX™系列&#xff0c;基于TriCore内核&#xff0c;用于汽车和工业领域。 XMC™系列&#xff0c;基于ARM Cortex-M内核&…