使用SpringBoot集成Minio实现文件上传、下载、删除功能
创始人
2024-12-27 09:38:14
0

1. 添加依赖

首先,在你的Spring Boot项目中添加Minio的依赖。在 pom.xml 文件中添加以下依赖:

     io.minio     minio     你的版本  

2. 配置application.properties

application.properties 中配置Minio连接信息:

# Minio文件服务配置 minio:   # 访问服务地址   url: "http://127.0.0.1:5000"   # 用户名   user-name: "madmin"   # mi码   password: "madmin"   # 桶的名称   bucket-name: "test" 

3. 创建Minio配置类

创建一个配置类 MinioConfig.java,用于初始化Minio客户端:

import io.minio.MinioClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;  @Configuration public class MinioConfig {      @Value("${minio.endpoint}")     private String endpoint;      @Value("${minio.accessKey}")     private String accessKey;      @Value("${minio.secretKey}")     private String secretKey;      @Bean     public MinioClient minioClient() {         return MinioClient.builder()                 .endpoint(endpoint)                 .credentials(accessKey, secretKey)                 .build();     } } 

4. 实现文件上传、下载、删除操作

创建一个服务类 MinioFileService.java,实现文件上传、下载、删除等操作:

import io.minio.*; import io.minio.errors.MinioException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile;  import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.stream.Collectors;  @Service public class MinioFileService {      @Autowired     private MinioClient minioClient;      @Value("${minio.bucketName}")     private String bucketName;      // 上传文件     public String uploadFile(MultipartFile file) throws IOException {         String fileName = StringUtils.cleanPath(file.getOriginalFilename());         try (InputStream inputStream = file.getInputStream()) {             minioClient.putObject(                     PutObjectArgs.builder()                             .bucket(bucketName)                             .object(fileName)                             .stream(inputStream, inputStream.available(), -1)                             .contentType(file.getContentType())                             .build());         } catch (MinioException | IOException e) {             throw new IOException("File upload failed: " + e.getMessage());         }         return fileName;     }      // 下载文件     public InputStream downloadFile(String fileName) throws IOException {         try {             return minioClient.getObject(                     GetObjectArgs.builder()                             .bucket(bucketName)                             .object(fileName)                             .build());         } catch (MinioException e) {             throw new IOException("File download failed: " + e.getMessage());         }     }      // 删除文件     public void deleteFile(String fileName) throws IOException {         try {             minioClient.removeObject(                     RemoveObjectArgs.builder()                             .bucket(bucketName)                             .object(fileName)                             .build());         } catch (MinioException e) {             throw new IOException("File deletion failed: " + e.getMessage());         }     }      // 获取所有文件列表     public List getAllFiles() throws IOException {         try {             return minioClient.listObjects(                     ListObjectsArgs.builder()                             .bucket(bucketName)                             .build())                     .stream()                     .map(Result::get)                     .map(Item::objectName)                     .collect(Collectors.toList());         } catch (MinioException e) {             throw new IOException("Failed to retrieve file list: " + e.getMessage());         }     } } 

5. 创建Controller层接口

创建一个Controller类 FileController.java,定义REST接口,实现文件上传、下载、删除的调用:

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.util.List;  @RestController @RequestMapping("/files") public class FileController {      @Autowired     private MinioFileService minioFileService;      // 文件上传     @PostMapping("/upload")     public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {         return minioFileService.uploadFile(file);     }      // 文件下载     @GetMapping("/download/{fileName:.+}")     public void downloadFile(@PathVariable String fileName, HttpServletResponse response) throws IOException {         InputStream is = minioFileService.downloadFile(fileName);         response.setContentType("application/octet-stream");         response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");         org.apache.commons.io.IOUtils.copy(is, response.getOutputStream());         response.flushBuffer();     }      // 文件删除     @DeleteMapping("/delete/{fileName:.+}")     public void deleteFile(@PathVariable String fileName) throws IOException {         minioFileService.deleteFile(fileName);     }      // 获取所有文件列表     @GetMapping("/list")     public List getAllFiles() throws IOException {         return minioFileService.getAllFiles();     } } 

6. 测试接口

启动Spring Boot应用程序,使用Postman或浏览器访问接口测试文件上传、下载、删除功能。

这样,你就完成了Spring Boot与Minio的集成,实现了基本的文件上传、下载、删除操作。

相关内容

热门资讯

一分钟内幕!科乐吉林麻将系统发... 一分钟内幕!科乐吉林麻将系统发牌规律,福建大玩家确实真的是有挂,技巧教程(有挂ai代打);所有人都在...
一分钟揭秘!微扑克辅助软件(透... 一分钟揭秘!微扑克辅助软件(透视辅助)确实是有挂(2024已更新)(哔哩哔哩);1、用户打开应用后不...
五分钟发现!广东雀神麻雀怎么赢... 五分钟发现!广东雀神麻雀怎么赢,朋朋棋牌都是是真的有挂,高科技教程(有挂方法)1、广东雀神麻雀怎么赢...
每日必看!人皇大厅吗(透明挂)... 每日必看!人皇大厅吗(透明挂)好像存在有挂(2026已更新)(哔哩哔哩);人皇大厅吗辅助器中分为三种...
重大科普!新华棋牌有挂吗(透视... 重大科普!新华棋牌有挂吗(透视)一直是有挂(2021已更新)(哔哩哔哩)1、完成新华棋牌有挂吗的残局...
二分钟内幕!微信小程序途游辅助... 二分钟内幕!微信小程序途游辅助器,掌中乐游戏中心其实存在有挂,微扑克教程(有挂规律)二分钟内幕!微信...
科技揭秘!jj斗地主系统控牌吗... 科技揭秘!jj斗地主系统控牌吗(透视)本来真的是有挂(2025已更新)(哔哩哔哩)1、科技揭秘!jj...
1分钟普及!哈灵麻将攻略小,微... 1分钟普及!哈灵麻将攻略小,微信小程序十三张好像存在有挂,规律教程(有挂技巧)哈灵麻将攻略小是一种具...
9分钟教程!科乐麻将有挂吗,传... 9分钟教程!科乐麻将有挂吗,传送屋高防版辅助(总是存在有挂)1、完成传送屋高防版辅助透视辅助安装,帮...
每日必看教程!兴动游戏辅助器下... 每日必看教程!兴动游戏辅助器下载(辅助)真是真的有挂(2025已更新)(哔哩哔哩)1、打开软件启动之...