From 0fef15b07a4305cfccf8946ec493998ee9a67c4d Mon Sep 17 00:00:00 2001 From: gulongcheng <474084054@qq.com> Date: Wed, 24 Dec 2025 09:01:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=A1=E6=89=B9=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=8E=A8=E9=80=81=E5=B1=95=E7=A4=BA=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E5=92=8C=E6=95=B0=E6=8D=AE=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sdm/common/utils/SystemOperate.java | 7 +++++++ .../com/sdm/data/service/IMinioService.java | 2 +- .../impl/MinioFileIDataFileServiceImpl.java | 8 ++++++-- .../sdm/data/service/minio/MinioService.java | 18 ++++++++++-------- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/common/src/main/java/com/sdm/common/utils/SystemOperate.java b/common/src/main/java/com/sdm/common/utils/SystemOperate.java index fb39f019..6a782c67 100644 --- a/common/src/main/java/com/sdm/common/utils/SystemOperate.java +++ b/common/src/main/java/com/sdm/common/utils/SystemOperate.java @@ -163,6 +163,13 @@ public class SystemOperate { } + public static void main(String[] args) throws UnsupportedEncodingException { + String outputFileName = "总结3.docx"; + String encodeFileName = URLEncoder.encode(outputFileName, "UTF-8"); + encodeFileName = encodeFileName.replaceAll("\\+", "%20"); + System.out.printf("encodeFileName:%s\n", encodeFileName); + } + public static void destroyProcess(Process process) { process.destroy(); } diff --git a/data/src/main/java/com/sdm/data/service/IMinioService.java b/data/src/main/java/com/sdm/data/service/IMinioService.java index 0c2622ff..2dfb18fd 100644 --- a/data/src/main/java/com/sdm/data/service/IMinioService.java +++ b/data/src/main/java/com/sdm/data/service/IMinioService.java @@ -97,7 +97,7 @@ public interface IMinioService { * @param encodedFileName * @param contentType */ - void streamFile(String objectName, String bucketName, HttpServletResponse response, String encodedFileName, String contentType)throws Exception ; + void streamFile(String objectName, String bucketName, HttpServletResponse response, String originalName, String contentType)throws Exception ; InputStream getMinioInputStream(String objectName, String bucketName); diff --git a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java index 88e4f0c3..b3391320 100644 --- a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java +++ b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java @@ -82,6 +82,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; @@ -1302,8 +1303,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { return; }*/ // 从MinIO下载文件 - String encodedFileName = URLEncoder.encode(fileMetadataInfo.getOriginalName(), StandardCharsets.UTF_8); - minioService.streamFile(fileObjectKey, fileMetadataInfo.getBucketName(), response, encodedFileName, ""); + minioService.streamFile(fileObjectKey, fileMetadataInfo.getBucketName(), response, fileMetadataInfo.getOriginalName(), ""); } catch (Exception e) { log.error("下载文件失败", e); try { @@ -1573,7 +1573,11 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { tempFileMetadataInfo.setAnalysisDirectionId(req.getAnalysisDirectionId()); tempFileMetadataInfo.setRemarks(req.getRemarks()); tempFileMetadataInfo.setSimulationPoolInfoList(req.getSimulationPoolInfoList()); + tempFileMetadataInfo.setCreateTime(fileMetadataInfo.getCreateTime()); + tempFileMetadataInfo.setUpdateTime(fileMetadataInfo.getCreateTime()); + tempFileMetadataInfo.setUpdateTime(LocalDateTime.now()); fileMetadataInfo.setTempMetadata(JSONObject.toJSONString(tempFileMetadataInfo)); + fileMetadataInfo.setUpdateTime(LocalDateTime.now()); //发起审批 FileApproveRequestBuilder updateFileMetaIntoApproveRequestBuilder = FileApproveRequestBuilder.builder() diff --git a/data/src/main/java/com/sdm/data/service/minio/MinioService.java b/data/src/main/java/com/sdm/data/service/minio/MinioService.java index 0275ac49..28f6867b 100644 --- a/data/src/main/java/com/sdm/data/service/minio/MinioService.java +++ b/data/src/main/java/com/sdm/data/service/minio/MinioService.java @@ -430,7 +430,7 @@ public class MinioService implements IMinioService { - public void streamFile(String objectName, String bucketName, HttpServletResponse response, String encodedFileName, String contentType) throws Exception { + public void streamFile(String objectName, String bucketName, HttpServletResponse response, String originalName, String contentType) throws Exception { StatObjectResponse stat = minioClient.statObject( StatObjectArgs.builder() .bucket(getBucketName(bucketName)) @@ -445,15 +445,17 @@ public class MinioService implements IMinioService { .build()); ReadableByteChannel inChannel = Channels.newChannel(stream); WritableByteChannel outChannel = Channels.newChannel(response.getOutputStream())) { + + + String encodeFileName = URLEncoder.encode(originalName, "UTF-8"); + encodeFileName = encodeFileName.replaceAll("\\+", "%20"); + response.reset(); String mediaType = org.apache.commons.lang3.StringUtils.isBlank(contentType) ? MediaType.APPLICATION_OCTET_STREAM_VALUE : contentType; - response.setContentType(mediaType); - - String encodeFileName = URLEncoder.encode(encodedFileName, "UTF-8"); - encodeFileName = encodeFileName.replaceAll("\\+", "%20"); - response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=\"" + encodeFileName + "\";filename*=utf-8"); - response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes"); - response.addHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(fileSize)); + response.setCharacterEncoding("UTF-8"); + response.addHeader("Content-Disposition", "attachment;filename=\"" + encodeFileName + "\";filename*=utf-8"); + response.addHeader("Content-Length", "" + fileSize); + response.addHeader("Content-Type", mediaType); ByteBuffer buffer = ByteBuffer.allocateDirect(minioConfig.getDirectMemory() <= NumberConstants.ZERO ? DEFAULT_BUFFER_SIZE : minioConfig.getDirectMemory());