From 1f18245c8f7645e0494414395906b0a6c213e3c8 Mon Sep 17 00:00:00 2001 From: chenxudong Date: Tue, 26 Nov 2024 10:31:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8B=E8=BD=BD=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/controller/EDDataController.java | 11 +++- .../data/manage/facade/EDDataFacade.java | 10 +++- .../request/indicator/FileDownloadDTO.java | 8 +++ .../service/facade/EDDataFacadeImpl.java | 58 ++++++++++--------- 4 files changed, 55 insertions(+), 32 deletions(-) create mode 100644 facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/indicator/FileDownloadDTO.java diff --git a/bootstrap/src/main/java/com/electromagnetic/industry/software/data/manage/controller/EDDataController.java b/bootstrap/src/main/java/com/electromagnetic/industry/software/data/manage/controller/EDDataController.java index 8e693e4..833f534 100644 --- a/bootstrap/src/main/java/com/electromagnetic/industry/software/data/manage/controller/EDDataController.java +++ b/bootstrap/src/main/java/com/electromagnetic/industry/software/data/manage/controller/EDDataController.java @@ -3,13 +3,18 @@ package com.electromagnetic.industry.software.data.manage.controller; import com.electromagnetic.industry.software.data.manage.facade.EDDataFacade; import com.electromagnetic.industry.software.data.manage.request.indicator.EDDataRequest; import com.electromagnetic.industry.software.data.manage.request.indicator.FileChunkDTO; +import com.electromagnetic.industry.software.data.manage.request.indicator.FileDownloadDTO; import electromagnetic.data.framework.share.model.ElectromagneticResult; import electromagnetic.data.framework.share.model.ElectromagneticResultUtil; import io.swagger.annotations.ApiOperation; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.Date; import java.util.List; @@ -62,9 +67,9 @@ public class EDDataController { @ApiOperation(value = "下载",notes = "") - @RequestMapping(value = "/download",method = RequestMethod.POST) - public ElectromagneticResult download(@RequestBody EDDataRequest request){ - return edDataFacade.download(request); + @RequestMapping(value = "/download",method = RequestMethod.GET) + public ResponseEntity download(@RequestBody FileDownloadDTO fileDownloadDTO, HttpServletResponse response) throws IOException { + return edDataFacade.download(fileDownloadDTO, response); } diff --git a/facade/src/main/java/com/electromagnetic/industry/software/data/manage/facade/EDDataFacade.java b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/facade/EDDataFacade.java index 9109666..6ca43af 100644 --- a/facade/src/main/java/com/electromagnetic/industry/software/data/manage/facade/EDDataFacade.java +++ b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/facade/EDDataFacade.java @@ -3,9 +3,14 @@ package com.electromagnetic.industry.software.data.manage.facade; import com.electromagnetic.industry.software.data.manage.request.indicator.EDDataRequest; import com.electromagnetic.industry.software.data.manage.request.indicator.FileChunkDTO; import com.electromagnetic.industry.software.data.manage.request.indicator.FileChunkResultDTO; +import com.electromagnetic.industry.software.data.manage.request.indicator.FileDownloadDTO; import com.electromagnetic.industry.software.data.manage.response.indicator.EDDataPageResponse; import electromagnetic.data.framework.share.model.ElectromagneticResult; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.ResponseEntity; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -49,10 +54,11 @@ public interface EDDataFacade { /** * 下载 - * @param request + * + * @param fileDownloadDTO * @return */ - ElectromagneticResult>> download(EDDataRequest request); + ResponseEntity download(FileDownloadDTO fileDownloadDTO, HttpServletResponse response) throws IOException; /** * 导出 diff --git a/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/indicator/FileDownloadDTO.java b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/indicator/FileDownloadDTO.java new file mode 100644 index 0000000..0193210 --- /dev/null +++ b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/indicator/FileDownloadDTO.java @@ -0,0 +1,8 @@ +package com.electromagnetic.industry.software.data.manage.request.indicator; + +import lombok.Data; + +@Data +public class FileDownloadDTO { + private String dataIdArr; +} diff --git a/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/facade/EDDataFacadeImpl.java b/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/facade/EDDataFacadeImpl.java index 7af6f9c..8079804 100644 --- a/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/facade/EDDataFacadeImpl.java +++ b/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/facade/EDDataFacadeImpl.java @@ -2,34 +2,35 @@ package com.electromagnetic.industry.software.data.manage.service.facade; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; +import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ZipUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.electromagnetic.industry.software.data.manage.domain.boardservice.category.model.Category; import com.electromagnetic.industry.software.data.manage.domain.boardservice.indicator.model.EDDataInfo; import com.electromagnetic.industry.software.data.manage.domain.boardservice.indicator.model.EDDataPage; import com.electromagnetic.industry.software.data.manage.domain.boardservice.indicator.parames.EDDataParams; import com.electromagnetic.industry.software.data.manage.domain.boardservice.indicator.service.EDDataService; -import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.service.CategoryService; import com.electromagnetic.industry.software.data.manage.facade.EDDataFacade; import com.electromagnetic.industry.software.data.manage.request.indicator.EDDataRequest; import com.electromagnetic.industry.software.data.manage.request.indicator.FileChunkDTO; import com.electromagnetic.industry.software.data.manage.request.indicator.FileChunkResultDTO; +import com.electromagnetic.industry.software.data.manage.request.indicator.FileDownloadDTO; import com.electromagnetic.industry.software.data.manage.response.indicator.EDDataPageResponse; import com.electromagnetic.industry.software.data.manage.service.mappers.EDDataMappers; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import electromagnetic.data.framework.share.id.IdWorker; import electromagnetic.data.framework.share.model.ElectromagneticResult; import electromagnetic.data.framework.share.model.ElectromagneticResultUtil; -import electromagnetic.data.framework.share.util.EleZipUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpStatus; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.io.*; import java.io.IOException; import java.nio.file.*; @@ -302,35 +303,38 @@ public class EDDataFacadeImpl implements EDDataFacade { * 下载 * WISDOM_DOWNLOAD * /data/ed/file/download - * @param request + * + * @param fileDownloadDTO * @return */ - public ElectromagneticResult>> download(EDDataRequest request) + public ResponseEntity download(FileDownloadDTO fileDownloadDTO, HttpServletResponse response) throws IOException { - //EDDataParams parames= EDDataMappers.INSTANCE.getEDDataParames(request); - // 获取文件存储的文件夹路径 String osName = System.getProperty("os.name").toLowerCase(); String storageFilePath = osName.startsWith("win") ? uploadFilePath + fileStoreDir : fileStoreDir; EDDataParams parames = new EDDataParams(); - List dataPathArr = new ArrayList(); - for(String dataId : request.getDataIdArr()) - { - parames.setDataId(dataId); - EDDataInfo edDataInfo = edDataService.getDataInfo(parames); - if(edDataInfo != null) - { - JSONObject implantJsonObject = JSON.parseObject(edDataInfo.getImplantJson()); - String filePath = implantJsonObject.getString("folderPath"); - filePath = storageFilePath + "/" + filePath + "/" + edDataInfo.getDataName(); - dataPathArr.add(filePath); - } - } + String dataId = fileDownloadDTO.getDataIdArr(); + parames.setDataId(dataId); + EDDataInfo edDataInfo = edDataService.getDataInfo(parames); + Assert.isTrue(edDataInfo != null, "没有找到该下载文件"); + JSONObject implantJsonObject = JSON.parseObject(edDataInfo.getImplantJson()); + String filePath = storageFilePath + "/" + implantJsonObject.getString("folderPath") + "/" + edDataInfo.getDataName(); + Assert.isTrue(FileUtil.exist(filePath), "下载文件不存在。"); + File file = new File(filePath); + FileSystemResource fileSystemResource = new FileSystemResource(file); + HttpHeaders headers = new HttpHeaders(); + headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); + headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", fileSystemResource.getFilename())); + headers.add("Pragma", "no-cache"); + headers.add("Expires", "0"); - Map> result = new HashMap<>(); - result.put("urlArr", dataPathArr); - - return ElectromagneticResultUtil.success(result); + // 构建响应实体(可以返回