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