From 41ab7abd0b0ec0fefb03b60bbaf42c02fbda666b Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 23 四月 2026 15:53:16 +0800
Subject: [PATCH] feat(production): 添加生产订单与销售台账关联功能
---
src/main/java/com/ruoyi/common/utils/MinioUtils.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 50 insertions(+), 6 deletions(-)
diff --git a/src/main/java/com/ruoyi/common/utils/MinioUtils.java b/src/main/java/com/ruoyi/common/utils/MinioUtils.java
index 30e479a..19f0dcd 100644
--- a/src/main/java/com/ruoyi/common/utils/MinioUtils.java
+++ b/src/main/java/com/ruoyi/common/utils/MinioUtils.java
@@ -11,15 +11,15 @@
import io.minio.http.Method;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.Getter;
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.FastByteArrayOutputStream;
import org.springframework.web.multipart.MultipartFile;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@@ -29,10 +29,10 @@
import java.util.stream.Collectors;
@Component
+@RequiredArgsConstructor
public class MinioUtils {
- @Autowired
- private MinioClient minioClient;
+ private final MinioClient minioClient;
@Value("${minio.preview-expiry}")
private Integer previewExpiry;
@@ -361,7 +361,7 @@
.build());
// 姝g‘缂栫爜鏂囦欢鍚嶏細鏇挎崲 + 涓� %20
- String encodedFileName = URLEncoder.encode(originalFileName, StandardCharsets.UTF_8)
+ String encodedFileName = URLEncoder.encode(originalFileName, String.valueOf(StandardCharsets.UTF_8))
.replace("+", "%20");
Map<String, String> reqParams = new HashMap<>();
@@ -386,4 +386,48 @@
throw new UtilException("鐢熸垚涓嬭浇URL澶辫触: " + e.getMessage(), e);
}
}
+
+ public String getDownloadUrl(String bucketFileName, String bucketName) {
+ if (StringUtils.isNotBlank(bucketFileName)) {
+ try {
+ // 妫�鏌ユ枃浠舵槸鍚﹀瓨鍦�
+ minioClient.statObject(StatObjectArgs.builder()
+ .bucket(bucketName)
+ .object(bucketFileName)
+ .build());
+
+ // 璁剧疆鍝嶅簲澶�
+ Map<String, String> reqParams = new HashMap<>();
+ // 鎻愬彇鍘熷鏂囦欢鍚嶏紙濡傛灉瀛樺偍鏃朵繚鐣欎簡鍘熷鍚嶇О锛�
+ String originalFileName = extractOriginalFileName(bucketFileName);
+ reqParams.put("response-content-disposition",
+ "attachment; filename=\"" + URLEncoder.encode(originalFileName, String.valueOf(StandardCharsets.UTF_8)) + "\"");
+
+ // 鏋勫缓棰勭鍚峌RL鍙傛暟
+ GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder()
+ .method(Method.GET)
+ .bucket(bucketName)
+ .object(bucketFileName)
+ .expiry(previewExpiry, TimeUnit.HOURS)
+ .extraQueryParams(reqParams)
+ .build();
+
+ return minioClient.getPresignedObjectUrl(args);
+ } catch (Exception e) {
+ throw new UtilException("MinioUtils锛氱敓鎴愪笅杞介摼鎺ュ紓甯�", e);
+ }
+ }
+ return null;
+ }
+
+ private String extractOriginalFileName(String bucketFileName) {
+ // 绀轰緥锛氬鏋滃瓨鍌ㄦ牸寮忎负 "鍘熷鏂囦欢鍚峗UUID"
+ int underscoreIndex = bucketFileName.lastIndexOf("_");
+ if (underscoreIndex > 0) {
+ return bucketFileName.substring(0, underscoreIndex);
+ }
+ // 濡傛灉娌℃湁鐗规畩鏍煎紡锛岀洿鎺ヨ繑鍥炲畬鏁存枃浠跺悕
+ return bucketFileName;
+ }
+
}
--
Gitblit v1.9.3