在现代应用中,传统的本地磁盘存储可能无法满足大文件、高频率数据访问和安全备份的需求。为了应对这些挑战,OSS
(对象存储服务)显得尤为重要。MinIO
作为一个广受欢迎的开源对象存储解决方案,能够轻松搭建分布式存储系统。
首先,在ruoyi-common/pom.xml
文件中添加MinIO的依赖。
<!-- MinIO 文件存储 -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.1</version>
</dependency>
接下来,在ruoyi-admin
项目的application.yml
中添加MinIO的配置信息。
# MinIO配置
minio:
url: http://localhost:9000
accessKey: minioadmin
secretKey: minioadmin
bucketName: ruoyi
在CommonController.java
中定义一个用于上传文件到MinIO的接口。
/**
* 自定义 MinIO 服务器上传请求
*/
@PostMapping("/uploadMinio")
@ResponseBody
public AjaxResult uploadFileMinio(MultipartFile file) throws Exception {
try {
// 上传并返回新文件名称
String fileName = FileUploadUtils.uploadMinio(file);
AjaxResult ajax = AjaxResult.success();
ajax.put("url", fileName);
ajax.put("fileName", fileName);
ajax.put("newFileName", FileUtils.getName(fileName));
ajax.put("originalFilename", file.getOriginalFilename());
return ajax;
} catch (Exception e) {
return AjaxResult.error(e.getMessage());
}
}
在ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java
中配置MinIO客户端。
package com.ruoyi.common.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.minio.MinioClient;
/**
* MinIO 配置信息
*/
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {
// MinIO 配置参数
private static String url;
private static String accessKey;
private static String secretKey;
private static String bucketName;
// Getter和Setter方法
// ...
@Bean
public MinioClient getMinioClient() {
return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
}
}
在ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
中实现文件上传的工具类。
package com.ruoyi.common.utils.file;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Objects;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.config.MinioConfig;
// 文件上传工具类
public class FileUploadUtils {
// 常量定义
public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024;
public static final int DEFAULT_FILE_NAME_LENGTH = 100;
private static String defaultBaseDir = RuoYiConfig.getProfile();
private static String bucketName = MinioConfig.getBucketName();
// 文件上传方法
public static final String uploadMinio(MultipartFile file) throws IOException {
// 上传到MinIO的实现
}
// 其他方法...
}
在ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtil.java
中实现MinIO的文件存储操作。
package com.ruoyi.common.utils.file;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.web.multipart.MultipartFile;
import io.minio.MinioClient;
// MinIO 文件存储工具类
public class MinioUtil {
// 上传文件的方法
public static String uploadFile(String bucketName, String fileName, MultipartFile multipartFile) throws IOException {
MinioClient minioClient = SpringUtils.getBean(MinioClient.class);
try (InputStream inputStream = multipartFile.getInputStream()) {
// 上传文件
// 返回文件URL
} catch (Exception e) {
throw new IOException(e.getMessage(), e);
}
}
}
通过集成MinIO
,若依框架的文件存储能力得到了显著增强,不仅提升了存储的灵活性,还增强了数据的安全性与可靠性。这一配置适合需要处理大量文件的应用,帮助开发者轻松实现分布式文件存储的需求。
powered by kaifamiao