From 3bc17729477e9405c899dc1371a0e7eb8ddb52c1 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 21 三月 2025 17:01:32 +0800
Subject: [PATCH] minio上传,下载,删除
---
basic-server/src/main/java/com/ruoyi/basic/pojo/WorkShopFile.java | 3
basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java | 3
basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java | 38 +++++++++
ruoyi-admin/src/main/resources/application-druid.yml | 7 +
basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java | 6
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java | 43 ++++++++++
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java | 21 +++++
basic-server/src/main/java/com/ruoyi/basic/service/WorkShopService.java | 2
ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java | 3
basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopServiceImpl.java | 82 +++++++-------------
10 files changed, 143 insertions(+), 65 deletions(-)
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/WorkShopController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java
similarity index 90%
rename from inspect-server/src/main/java/com/ruoyi/inspect/controller/WorkShopController.java
rename to basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java
index a4ff872..624b04b 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/controller/WorkShopController.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/controller/WorkShopController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.inspect.controller;
+package com.ruoyi.basic.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.dto.WorkShopDto;
@@ -42,7 +42,7 @@
@ApiOperation(value = "杞﹂棿鏂囦欢涓婁紶")
@PostMapping("/uploadFile")
- public Result uploadFile(Integer id, MultipartFile file) {
+ public Result uploadFile(Integer id, MultipartFile file)throws Exception {
return Result.success(workShopService.uploadFile(id,file));
}
@@ -55,6 +55,6 @@
@ApiOperation(value = "鍒犻櫎闄勪欢")
@DeleteMapping("/delFile")
public Result<?> delFile(Integer id) {
- return Result.success(workShopFileService.removeById(id));
+ return Result.success(workShopFileService.delFile(id));
}
}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/pojo/WorkShopFile.java b/basic-server/src/main/java/com/ruoyi/basic/pojo/WorkShopFile.java
index 9fb5675..6a580ad 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/pojo/WorkShopFile.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/pojo/WorkShopFile.java
@@ -43,4 +43,7 @@
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
+
+ @ApiModelProperty("棰勮鍦板潃")
+ private String fileMinioUrl;
}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java b/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java
index fa257cb..562ffa1 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopFileService.java
@@ -9,5 +9,6 @@
* @createDate 2024-03-17
*/
public interface WorkShopFileService extends IService<WorkShopFile> {
-
+
+ int delFile(Integer id);
}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopService.java b/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopService.java
index dd39e58..20bb426 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopService.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/WorkShopService.java
@@ -20,5 +20,5 @@
int delWorkShop(Integer id);
- int uploadFile(Integer id, MultipartFile file);
+ int uploadFile(Integer id, MultipartFile file) throws Exception;
}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java
index bb11804..0b4801d 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopFileServiceImpl.java
@@ -5,7 +5,11 @@
import com.ruoyi.basic.mapper.WorkShopFileMapper;
import com.ruoyi.basic.pojo.WorkShopFile;
import com.ruoyi.basic.service.WorkShopFileService;
+import com.ruoyi.common.utils.file.MinioUtils;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
/**
* @description 閽堝琛ㄣ�恮ork_shop_file(杞﹂棿闄勪欢鍚嶇О)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
@@ -14,6 +18,40 @@
@Service
public class WorkShopFileServiceImpl extends ServiceImpl<WorkShopFileMapper, WorkShopFile> implements WorkShopFileService {
+ @Resource
+ private WorkShopFileMapper workShopFileMapper;
+
+ @Resource
+ private MinioUtils minioUtils;
+
+ @Value("${minio.bucketName}")
+ private String bucketName;
+
+ @Override
+ public int delFile(Integer id) {
+ // 鑻� id 涓虹┖锛岀洿鎺ヨ繑鍥� 0锛岃〃绀烘湭鍒犻櫎浠讳綍璁板綍
+ if (id == null) {
+ return 0;
+ }
+ try {
+ // 鏌ヨ瑕佸垹闄ょ殑鏂囦欢淇℃伅
+ WorkShopFile file = workShopFileMapper.selectById(id);
+ if (file != null && file.getFileUrl() != null) {
+ // 妫�鏌� MinIO 涓枃浠舵槸鍚﹀瓨鍦�
+ if (minioUtils.objectExists(bucketName, file.getFileUrl())) {
+ // 鍏堝垹闄� MinIO 涓殑瀵硅薄
+ minioUtils.removeObjectsResult(bucketName, file.getFileUrl());
+ }
+ }
+ // 鎵ц鏁版嵁搴撳垹闄ゆ搷浣�
+ int deleteResult = workShopFileMapper.deleteById(id);
+ return deleteResult;
+ } catch (Exception e) {
+ // 澶勭悊寮傚父锛屽彲鏍规嵁瀹為檯鎯呭喌璁板綍鏃ュ織鎴栨姏鍑鸿嚜瀹氫箟寮傚父
+ e.printStackTrace();
+ return 0;
+ }
+ }
}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopServiceImpl.java
index 7d006b6..7620e5b 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/WorkShopServiceImpl.java
@@ -1,6 +1,5 @@
package com.ruoyi.basic.service.impl;
-import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -10,16 +9,16 @@
import com.ruoyi.basic.pojo.WorkShop;
import com.ruoyi.basic.pojo.WorkShopFile;
import com.ruoyi.basic.service.WorkShopService;
+import com.ruoyi.common.core.domain.MinioResult;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.file.MinioUtils;
+import com.ruoyi.framework.exception.ErrorException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
-import java.io.File;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
/**
* @description 閽堝琛ㄣ�恮ork_shop(杞﹂棿鍚嶇О)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
@@ -33,11 +32,11 @@
@Resource
private WorkShopFileMapper workShopFileMapper;
- @Value("${wordUrl}")
- private String wordUrl;
+ @Resource
+ private MinioUtils minioUtils;
- @Value("${file.path}")
- private String imgUrl;
+ @Value("${minio.bucketName}")
+ private String bucketName;
@Override
@@ -58,58 +57,37 @@
public int delWorkShop(Integer id) {
return workShopMapper.deleteById(id);
}
-
+
@Override
- public int uploadFile(Integer id, MultipartFile file) {
- String username = SecurityUtils.getUsername();
- String urlString;
- String pathName;
- String path;
- String filename = file.getOriginalFilename();
- String contentType = file.getContentType();
+ public int uploadFile(Integer id, MultipartFile file) throws Exception {
+ // 鍩虹鏍¢獙
+ if (file == null || file.isEmpty()) {
+ throw new ErrorException("涓婁紶鏂囦欢涓虹┖");
+ }
+
WorkShopFile workShopFile = new WorkShopFile();
workShopFile.setWorkShopId(id);
- workShopFile.setFileName(filename);
- if (contentType != null && contentType.startsWith("image/")) {
- // 鏄浘鐗�
- path = imgUrl;
- workShopFile.setType(1);
- } else {
- // 鏄枃浠�
- path = wordUrl;
- workShopFile.setType(2);
- }
+ workShopFile.setFileName(file.getOriginalFilename());
+ workShopFile.setName(SecurityUtils.getUsername());
+
try {
- // 1. 瑙f瀽缁濆璺緞锛堜紭鍏堜娇鐢ㄩ厤缃殑缁濆璺緞锛屽惁鍒欏熀浜庨」鐩牴鐩綍锛�
- String basePath = imgUrl.startsWith(File.separator) ? imgUrl : System.getProperty("user.dir") + File.separator + imgUrl;
- File realpath = new File(basePath);
-
- // 2. 鍒涘缓鐩綍锛堣褰曟棩蹇楋紝妫�鏌ユ槸鍚︽垚鍔燂級
- if (!realpath.exists()) {
- if (!realpath.mkdirs()) {
- System.err.println("鐩綍鍒涘缓澶辫触锛歿}");
- return 0;
- }
+ String contentType = file.getContentType();
+ String category = contentType != null && contentType.startsWith("image/") ? "images" : "docs";
+ MinioResult upload = minioUtils.upload(bucketName, file, true);
+ // 璁板綍瀛樺偍璺緞
+ workShopFile.setFileUrl(upload.getBucketFileName());
+ workShopFile.setFileMinioUrl(upload.getPreviewExpiry());
+ workShopFile.setType(category.equals("images") ? 1 : 2);
+ // 鏁版嵁搴撴搷浣�
+ int insertResult = workShopFileMapper.insert(workShopFile);
+ if (insertResult <= 0) {
+ throw new ErrorException("鏁版嵁搴撴彃鍏ュけ璐�");
}
-
- // 3. 鐢熸垚鍞竴鏂囦欢鍚�
- String uuid = UUID.randomUUID().toString().replace("-", "");
- String suffix = filename.substring(filename.lastIndexOf("."));
- pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "_" + uuid + suffix;
- File targetFile = new File(realpath, pathName);
-
- // 4. 淇濆瓨鏂囦欢
- file.transferTo(targetFile);
- workShopFile.setFileUrl(pathName);
- workShopFile.setName(username);
- return workShopFileMapper.insert(workShopFile);
+ return insertResult;
} catch (Exception e) {
- e.printStackTrace();
- System.err.println("闄勪欢涓婁紶閿欒");
- return 0;
+ throw new Exception("绯荤粺寮傚父: ", e);
}
}
-
}
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 d58b107..6378290 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
@@ -1,9 +1,13 @@
package com.ruoyi.web.controller.common;
+import java.io.IOException;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
+import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import com.ruoyi.common.utils.file.MinioUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -28,14 +32,16 @@
*/
@RestController
@RequestMapping("/common")
-public class CommonController
-{
+public class CommonController {
private static final Logger log = LoggerFactory.getLogger(CommonController.class);
@Autowired
private ServerConfig serverConfig;
private static final String FILE_DELIMETER = ",";
+
+ @Resource
+ private MinioUtils minioUtils;
/**
* 閫氱敤涓嬭浇璇锋眰
@@ -160,4 +166,37 @@
log.error("涓嬭浇鏂囦欢澶辫触", e);
}
}
+
+ /**
+ * 閫氱敤鏂囦欢涓嬭浇鏂规硶
+ *
+ * @param fileUrl Minio涓殑鏂囦欢璺緞锛堝锛歩mages/2023/report.pdf锛�
+ * @param fileName 涓嬭浇鏃舵樉绀虹殑鏂囦欢鍚嶏紙濡傦細骞村害鎶ュ憡.pdf锛�
+ * @param response HttpServletResponse瀵硅薄
+ */
+ @GetMapping("/downloadMinio")
+ public void downloadFile(String fileUrl, String fileName, HttpServletResponse response) {
+ Logger logger = LoggerFactory.getLogger(this.getClass());
+ if (StringUtils.isBlank(fileUrl) || StringUtils.isBlank(fileName)) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ try (PrintWriter writer = response.getWriter()) {
+ writer.write("鏂囦欢璺緞鍜屾枃浠跺悕涓嶈兘涓虹┖");
+ } catch (IOException e) {
+ logger.error("璁剧疆鍝嶅簲淇℃伅鍑洪敊", e);
+ }
+ return;
+ }
+ String bucketName = "radio-frequency";
+ try {
+ minioUtils.download(bucketName, fileUrl, fileName, response);
+ } catch (Exception e) {
+ logger.error("鏂囦欢涓嬭浇澶辫触", e);
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ try (PrintWriter writer = response.getWriter()) {
+ writer.write("鏂囦欢涓嬭浇澶辫触: " + e.getMessage());
+ } catch (IOException ioException) {
+ logger.error("璁剧疆鍝嶅簲淇℃伅鍑洪敊", ioException);
+ }
+ }
+ }
}
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index 9bd45f1..719bc31 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -1,4 +1,4 @@
-# 鏈湴
+# 瑁呭姝e紡搴�
# 鏁版嵁婧愰厤缃�
spring:
@@ -111,12 +111,13 @@
org.springframework: warn
minio:
- endpoint: http://114.132.189.42/
- port: 7019
+ endpoint: http://114.132.189.42:7019
secure: false
accessKey: admin
secretKey: 12345678
preview-expiry: 24 # 棰勮鍦板潃榛樿24灏忔椂
+ bucketName: radio-frequency
+ publicUrl:
# 鐓х墖瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
file:
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java
index 28f489f..d9277a0 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java
@@ -13,14 +13,13 @@
@Data
public class MinioConfig {
private String endpoint;
- private int port;
private String accessKey;
private String secretKey;
private Boolean secure;
@Bean
public MinioClient getMinioClient() {
- return MinioClient.builder().endpoint(endpoint, port, secure)
+ return MinioClient.builder().endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java
index 25efe7c..73402bb 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MinioUtils.java
@@ -167,7 +167,7 @@
minioResult.setBucketFileName(bucketFilePath);
// 杩斿洖姘镐箙棰勮鍦板潃
if (isPreviewExpiry) {
- String previewUrl = getPreviewUrl(bucketFilePath, bucketName, isPreviewExpiry);
+ String previewUrl = getPreviewUrl(bucketFilePath, bucketName, true);
minioResult.setPreviewExpiry(previewUrl);
}
minioResult.setOriginalName(originalFileName);
@@ -291,4 +291,23 @@
}
return null;
}
+
+
+ /**
+ * 妫�鏌� MinIO 涓璞℃槸鍚﹀瓨鍦�
+ * @param bucketName 瀛樺偍妗跺悕绉�
+ * @param bucketFileName 妗朵腑鏂囦欢鍚嶇О
+ * @return
+ */
+ public boolean objectExists(String bucketName, String bucketFileName) {
+ try {
+ minioClient.statObject(StatObjectArgs.builder()
+ .bucket(bucketName)
+ .object(bucketFileName)
+ .build());
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
}
--
Gitblit v1.9.3