Minio是一个高性能的对象存储服务器,它可以在Linux、MacOS和Windows等操作系统上运行,并通过命令行界面或RESTful API进行管理。
本文为用Minio存储文件。
1. 在pom.xml文件中添加MinIO的Java客户端库依赖
<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>你的MinIO客户端库版本号</version> </dependency>
2.在application.properties或application.yml中配置MinIO服务器的访问信息
minio:
endpoint: http://your-minio-endpoint
accessKey: your-access-key
secretKey: your-secret-key
bucketName: your-bucket-name
3.创建一个配置类来读取上述配置
@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.创建文件存储服务和文件下载服务
@Service
public class FileStorageService {
@Autowired
private MinioClient minioClient;
@Value("${minio.bucketName}")
private String bucketName;
public String uploadFile(MultipartFile file) {
try {
// 生成唯一文件名
String fileName = UUID.randomUUID().toString() + "_" + file.getOriginalFilename();
// 上传到MinIO
minioClient.putObject(bucketName, fileName, file.getInputStream(), file.getSize(),
file.getContentType());
// 返回MinIO中文件的URL
return minioClient.getObjectUrl(bucketName, fileName);
} catch (Exception e) {
throw new RuntimeException("文件上传失败", e);
}
}
public void downloadFile(String objectName, OutputStream outputStream) {
try {
minioClient.getObject(bucketName, objectName, outputStream);
} catch (MinioException e) {
throw new RuntimeException("文件下载失败", e);
}
}
}