From 5a4bff855dbe7ab2c9139b93bc481618fb962da3 Mon Sep 17 00:00:00 2001 From: wujingtao Date: Thu, 23 Sep 2021 10:12:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0form=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=92=8C=E7=94=9F=E6=88=90=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rest/TempFileRecordController.java | 30 +++++++++- .../service/TempFileRecordService.java | 23 +++++++ .../impl/TempFileRecordServiceImpl.java | 60 +++++++++++++++++++ .../resources/config/application-test.yml | 9 ++- .../src/main/resources/config/application.yml | 3 +- pom.xml | 1 - 6 files changed, 119 insertions(+), 7 deletions(-) diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/tmpfilerecord/rest/TempFileRecordController.java b/eladmin-system/src/main/java/me/zhengjie/modules/tmpfilerecord/rest/TempFileRecordController.java index b7643b3..56d94b6 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/tmpfilerecord/rest/TempFileRecordController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/tmpfilerecord/rest/TempFileRecordController.java @@ -15,6 +15,7 @@ */ package me.zhengjie.modules.tmpfilerecord.rest; +import me.zhengjie.annotation.AnonymousAccess; import me.zhengjie.annotation.Log; import me.zhengjie.modules.tmpfilerecord.domain.TempFileRecord; import me.zhengjie.modules.tmpfilerecord.service.TempFileRecordService; @@ -29,6 +30,7 @@ import org.springframework.web.bind.annotation.*; import io.swagger.annotations.*; import java.io.IOException; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** @@ -59,7 +61,33 @@ public class TempFileRecordController { public ResponseEntity query(TempFileRecordQueryCriteria criteria, Pageable pageable) { return new ResponseEntity<>(tempFileRecordService.queryAll(criteria, pageable), HttpStatus.OK); } - + + @GetMapping("/link") + @Log("获取本地链接") + @ApiOperation("获取本地链接") + public ResponseEntity getFormLink(Integer id) { + return tempFileRecordService.getFormLink(id); + } + + @GetMapping("/remoterLink") + @Log("获取远程链接") + @ApiOperation("获取远程链接") + public ResponseEntity getFormRemoterLink(Integer id) { + return tempFileRecordService.getFormRemoterLink(id); + } + + /** + * 本地进行下载文件 + */ + @Log("下载文件") + @GetMapping("downloadFile") + @ApiOperation("下载文件") + @AnonymousAccess // fixme 需要测试完成后进行去除和使用上面的权限注解 + public void downLoadFormFile(HttpServletResponse response, HttpServletRequest request, @RequestParam(value = "rand") String rand) { + // 校验参数,进行下载文件 + tempFileRecordService.downloadFilesByRandCode(rand, response, request); + } + @PostMapping @Log("新增tmpfilerecord") @ApiOperation("新增tmpfilerecord") diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/tmpfilerecord/service/TempFileRecordService.java b/eladmin-system/src/main/java/me/zhengjie/modules/tmpfilerecord/service/TempFileRecordService.java index e8b0d5f..184ca08 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/tmpfilerecord/service/TempFileRecordService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/tmpfilerecord/service/TempFileRecordService.java @@ -25,6 +25,7 @@ import org.springframework.web.multipart.MultipartFile; import java.util.Map; import java.util.List; import java.io.IOException; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** @@ -104,4 +105,26 @@ public interface TempFileRecordService { */ long batchUpdate(List TempFileRecordDto); + /** + * 根据id,获取对应的链接 + * + * @param id + * @return + */ + ResponseEntity getFormLink(Integer id); + + /** + * 根据id,获取对应的链接 + * + * @param id + * @return + */ + ResponseEntity getFormRemoterLink(Integer id); + + /** + * 根据码来下载文件 + * + * @param rand 验证下载码 + */ + void downloadFilesByRandCode(String rand, HttpServletResponse response, HttpServletRequest request); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/tmpfilerecord/service/impl/TempFileRecordServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/tmpfilerecord/service/impl/TempFileRecordServiceImpl.java index d777afd..7a7e35c 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/tmpfilerecord/service/impl/TempFileRecordServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/tmpfilerecord/service/impl/TempFileRecordServiceImpl.java @@ -18,11 +18,13 @@ package me.zhengjie.modules.tmpfilerecord.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ZipUtil; import lombok.extern.slf4j.Slf4j; import me.zhengjie.common.http.CommonResponse; import me.zhengjie.common.http.ResponseCode; import me.zhengjie.common.json.OnceLinkMsgJsonContent; import me.zhengjie.exception.BadRequestException; +import me.zhengjie.modules.mnt.util.ZipUtils; import me.zhengjie.modules.tmpfilerecord.domain.TempFileRecord; import me.zhengjie.utils.*; import lombok.RequiredArgsConstructor; @@ -39,8 +41,10 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import java.io.File; import java.util.*; import java.io.IOException; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** @@ -56,6 +60,11 @@ public class TempFileRecordServiceImpl implements TempFileRecordService { private final TempFileRecordRepository tempFileRecordRepository; private final TempFileRecordMapper tempFileRecordMapper; + /** + * 远程服务器地址 + */ + @Value("${tempFileRecord.link.address}") + private String tempFileRecordAddress; /** * 远程服务器地址 */ @@ -135,4 +144,55 @@ public class TempFileRecordServiceImpl implements TempFileRecordService { ); return TempFileRecordDto.size(); } + + @Override + public ResponseEntity getFormLink(Integer id) { + TempFileRecordDto byId = findById(id); + long num = DateUtil.between(byId.getGmtCreate(), DateUtil.date(), DateUnit.DAY); + if ((int) num > byId.getDays()) { + throw new BadRequestException("超过有效期"); + } + + String url = tempFileRecordAddress + "?" + "rand=" + byId.getVerificationCode(); + return getOnceLinkResponseEntity(url); + } + + @Override + public ResponseEntity getFormRemoterLink(Integer id) { + TempFileRecordDto byId = findById(id); + long num = DateUtil.between(byId.getGmtCreate(), DateUtil.date(), DateUnit.DAY); + if ((int) num > byId.getDays()) { + throw new BadRequestException("超过有效期"); + } + String url = remoteFileServerAddress + "?" + "rand=" + byId.getVerificationCode(); + return getOnceLinkResponseEntity(url); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void downloadFilesByRandCode(String rand, HttpServletResponse response, HttpServletRequest request) { + // 根据验证码查出需要的信息 + TempFileRecord tempFileRecord = findByVerificationCode(rand.trim(), 0); + // 切分需要的文件地址 + if (tempFileRecord != null) { + String filePaths = tempFileRecord.getFilePaths(); + if (StringUtils.isNotBlank(filePaths)) { + FileUtil.downloadFile(request, response, new File(filePaths), true); + // 更新下载结果 + tempFileRecord.setFileStatus(1); + update(tempFileRecord); + } + } + } + + private ResponseEntity getOnceLinkResponseEntity(String result) { + OnceLinkMsgJsonContent linkUrl = new OnceLinkMsgJsonContent(); + if (StringUtils.isNotBlank(result)) { + // 进行json相关的转换 + linkUrl.setOnceLink(result); + } else { + return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.NO_MATCH_ARGUMENT_SET), HttpStatus.OK); + } + return new ResponseEntity<>(CommonResponse.createBySuccess(linkUrl), HttpStatus.OK); + } } \ No newline at end of file diff --git a/eladmin-system/src/main/resources/config/application-test.yml b/eladmin-system/src/main/resources/config/application-test.yml index 9e9e160..b25fa0e 100644 --- a/eladmin-system/src/main/resources/config/application-test.yml +++ b/eladmin-system/src/main/resources/config/application-test.yml @@ -1,9 +1,9 @@ #配置数据源 spring: shardingsphere: -# props: -# sql: -# show: true + # props: + # sql: + # show: true datasource: names: eladmin,schema eladmin: @@ -246,3 +246,6 @@ remote: file-base-path-linux: /home/eladmin/file/temp/ file-base-path-windows: C:\eladmin\file\temp\ file-base-path-mac: ~/file/eladmin/temp/ +tempFileRecord: + link: + address: 'http://116.62.197.152:8000/api/tempFileRecord/downloadFile' \ No newline at end of file diff --git a/eladmin-system/src/main/resources/config/application.yml b/eladmin-system/src/main/resources/config/application.yml index d09003c..41ee32c 100644 --- a/eladmin-system/src/main/resources/config/application.yml +++ b/eladmin-system/src/main/resources/config/application.yml @@ -25,7 +25,7 @@ spring: order_inserts: true order_updates: true open-in-view: true -# show-sql: true + # show-sql: true redis: #数据库索引 database: 0 @@ -34,7 +34,6 @@ spring: password: #连接超时时间 timeout: 5000 - task: pool: # 核心线程池大小 diff --git a/pom.xml b/pom.xml index 8dd167c..bf2aa48 100644 --- a/pom.xml +++ b/pom.xml @@ -129,7 +129,6 @@ - org.apache.shardingSphere sharding-jdbc-spring-boot-starter