首先,在你的Spring Boot项目中添加Minio的依赖。在 pom.xml
文件中添加以下依赖:
io.minio minio 你的版本
在 application.properties
中配置Minio连接信息:
# Minio文件服务配置 minio: # 访问服务地址 url: "http://127.0.0.1:5000" # 用户名 user-name: "madmin" # mi码 password: "madmin" # 桶的名称 bucket-name: "test"
创建一个配置类 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(); } }
创建一个服务类 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()); } } }
创建一个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(); } }
启动Spring Boot应用程序,使用Postman或浏览器访问接口测试文件上传、下载、删除功能。
这样,你就完成了Spring Boot与Minio的集成,实现了基本的文件上传、下载、删除操作。