diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 1450169..0d2c17c 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -62,10 +62,6 @@
org.springframework
spring-context
-
- org.springframework
- spring-context
-
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
index b7fad0c..c17da6c 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -20,6 +20,8 @@ import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.framework.config.ServerConfig;
+import com.ruoyi.framework.config.MinioProperties;
+import com.ruoyi.framework.service.MinioService;
/**
* 通用请求处理
@@ -35,6 +37,12 @@ public class CommonController
@Autowired
private ServerConfig serverConfig;
+ @Autowired(required = false)
+ private MinioService minioService;
+
+ @Autowired(required = false)
+ private MinioProperties minioProperties;
+
private static final String FILE_DELIMETER = ",";
/**
@@ -77,9 +85,22 @@ public class CommonController
{
try
{
- // 上传文件路径
+ if (minioProperties != null && minioProperties.isEnabled())
+ {
+ MinioService.UploadResult result = minioService.upload(file);
+ String fileName = result.getObjectName();
+ String url = result.getUrl();
+ AjaxResult ajax = AjaxResult.success();
+ ajax.put("url", url);
+ ajax.put("fileName", fileName);
+ ajax.put("newFileName", FileUtils.getName(fileName));
+ ajax.put("originalFilename", file.getOriginalFilename());
+ return ajax;
+ }
+
+ // 本地上传路径
String filePath = RuoYiConfig.getUploadPath();
- // 上传并返回新文件名称
+ // 本地上传并返回新文件名称
String fileName = FileUploadUtils.upload(filePath, file);
String url = serverConfig.getUrl() + fileName;
AjaxResult ajax = AjaxResult.success();
@@ -103,21 +124,37 @@ public class CommonController
{
try
{
- // 上传文件路径
- String filePath = RuoYiConfig.getUploadPath();
List urls = new ArrayList();
List fileNames = new ArrayList();
List newFileNames = new ArrayList();
List originalFilenames = new ArrayList();
- for (MultipartFile file : files)
+ if (minioProperties != null && minioProperties.isEnabled())
{
- // 上传并返回新文件名称
- String fileName = FileUploadUtils.upload(filePath, file);
- String url = serverConfig.getUrl() + fileName;
- urls.add(url);
- fileNames.add(fileName);
- newFileNames.add(FileUtils.getName(fileName));
- originalFilenames.add(file.getOriginalFilename());
+ for (MultipartFile file : files)
+ {
+ MinioService.UploadResult result = minioService.upload(file);
+ String fileName = result.getObjectName();
+ String url = result.getUrl();
+ urls.add(url);
+ fileNames.add(fileName);
+ newFileNames.add(FileUtils.getName(fileName));
+ originalFilenames.add(file.getOriginalFilename());
+ }
+ }
+ else
+ {
+ // 本地上传路径
+ String filePath = RuoYiConfig.getUploadPath();
+ for (MultipartFile file : files)
+ {
+ // 上传并返回新文件名称
+ String fileName = FileUploadUtils.upload(filePath, file);
+ String url = serverConfig.getUrl() + fileName;
+ urls.add(url);
+ fileNames.add(fileName);
+ newFileNames.add(FileUtils.getName(fileName));
+ originalFilenames.add(file.getOriginalFilename());
+ }
}
AjaxResult ajax = AjaxResult.success();
ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index daa28a0..ada44c2 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -127,6 +127,14 @@ springdoc:
paths-to-match: '/**'
packages-to-scan: com.ruoyi.web.controller.tool
+# MinIO配置
+minio:
+ enabled: true
+ endpoint: http://49.232.154.205:10900
+ access-key: 4EsLD9g9OM09DT0HaBKj
+ secret-key: 05SFC5fleqTnaLRYBrxHiphMFYbGX5nYicj0WCHA
+ bucket: rtsp
+
# 防止XSS攻击
xss:
# 过滤开关
diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml
index 5456102..ef0ed4e 100644
--- a/ruoyi-framework/pom.xml
+++ b/ruoyi-framework/pom.xml
@@ -59,6 +59,13 @@
ruoyi-system
+
+
+ io.minio
+ minio
+ 8.5.11
+
+
\ No newline at end of file
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MinioProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MinioProperties.java
new file mode 100644
index 0000000..bd64dfc
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MinioProperties.java
@@ -0,0 +1,39 @@
+package com.ruoyi.framework.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigurationProperties(prefix = "minio")
+public class MinioProperties {
+ /** 是否启用MinIO上传 */
+ private boolean enabled = true;
+ /** MinIO服务端地址,例如 http://127.0.0.1:9000 */
+ private String endpoint;
+ /** 访问key */
+ private String accessKey;
+ /** 密钥 */
+ private String secretKey;
+ /** 桶名称 */
+ private String bucket;
+ /** 是否使用https */
+ private boolean secure = false;
+
+ public boolean isEnabled() { return enabled; }
+ public void setEnabled(boolean enabled) { this.enabled = enabled; }
+
+ public String getEndpoint() { return endpoint; }
+ public void setEndpoint(String endpoint) { this.endpoint = endpoint; }
+
+ public String getAccessKey() { return accessKey; }
+ public void setAccessKey(String accessKey) { this.accessKey = accessKey; }
+
+ public String getSecretKey() { return secretKey; }
+ public void setSecretKey(String secretKey) { this.secretKey = secretKey; }
+
+ public String getBucket() { return bucket; }
+ public void setBucket(String bucket) { this.bucket = bucket; }
+
+ public boolean isSecure() { return secure; }
+ public void setSecure(boolean secure) { this.secure = secure; }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/service/MinioService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/service/MinioService.java
new file mode 100644
index 0000000..4bf2ebd
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/service/MinioService.java
@@ -0,0 +1,78 @@
+package com.ruoyi.framework.service;
+
+import com.ruoyi.framework.config.MinioProperties;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import io.minio.BucketExistsArgs;
+import io.minio.MakeBucketArgs;
+import io.minio.MinioClient;
+import io.minio.PutObjectArgs;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+
+@Service
+public class MinioService {
+
+ private final MinioClient minioClient;
+ private final MinioProperties properties;
+
+ @Autowired
+ public MinioService(MinioProperties properties) {
+ this.properties = properties;
+ this.minioClient = MinioClient.builder()
+ .endpoint(properties.getEndpoint())
+ .credentials(properties.getAccessKey(), properties.getSecretKey())
+ .build();
+ }
+
+ public UploadResult upload(MultipartFile file) throws Exception {
+ ensureBucket();
+ String objectName = FileUploadUtils.extractFilename(file);
+ try (InputStream is = file.getInputStream()) {
+ minioClient.putObject(
+ PutObjectArgs.builder()
+ .bucket(properties.getBucket())
+ .object(objectName)
+ .stream(is, file.getSize(), -1)
+ .contentType(file.getContentType())
+ .build()
+ );
+ }
+ String url = buildObjectUrl(objectName);
+ return new UploadResult(objectName, url);
+ }
+
+ public String buildObjectUrl(String objectName) {
+ String endpoint = properties.getEndpoint();
+ if (endpoint.endsWith("/")) {
+ endpoint = endpoint.substring(0, endpoint.length() - 1);
+ }
+ return endpoint + "/" + properties.getBucket() + "/" + objectName;
+ }
+
+ private void ensureBucket() throws Exception {
+ boolean exists = minioClient.bucketExists(BucketExistsArgs.builder()
+ .bucket(properties.getBucket())
+ .build());
+ if (!exists) {
+ minioClient.makeBucket(MakeBucketArgs.builder()
+ .bucket(properties.getBucket())
+ .build());
+ }
+ }
+
+ public static class UploadResult {
+ private final String objectName;
+ private final String url;
+
+ public UploadResult(String objectName, String url) {
+ this.objectName = objectName;
+ this.url = url;
+ }
+
+ public String getObjectName() { return objectName; }
+ public String getUrl() { return url; }
+ }
+}
diff --git a/ruoyi-video/pom.xml b/ruoyi-video/pom.xml
index 1744a8b..f6dd5be 100644
--- a/ruoyi-video/pom.xml
+++ b/ruoyi-video/pom.xml
@@ -71,6 +71,16 @@
commons-lang
2.6
+
+ org.testng
+ testng
+ 7.11.0
+ compile
+
+
+ org.springframework
+ spring-aop
+