From f139b3c8d3b14b16fc4d102fc2995c04a807476e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= <1162714483@qq.com> Date: Sun, 11 Jul 2021 17:10:56 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E5=90=8C=E6=97=B6=E4=BF=AE=E6=94=B9=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E6=96=87=E4=BB=B6=E7=9A=84md5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/controller/OfficeController.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/qiwenshare/file/controller/OfficeController.java b/src/main/java/com/qiwenshare/file/controller/OfficeController.java index 3b80963..1197088 100644 --- a/src/main/java/com/qiwenshare/file/controller/OfficeController.java +++ b/src/main/java/com/qiwenshare/file/controller/OfficeController.java @@ -12,11 +12,13 @@ import com.qiwenshare.file.api.IFiletransferService; import com.qiwenshare.file.api.IUserFileService; import com.qiwenshare.file.api.IUserService; import com.qiwenshare.file.domain.*; +import com.qiwenshare.file.dto.DownloadFileDTO; import com.qiwenshare.file.dto.file.CreateOfficeFileDTO; import com.qiwenshare.file.dto.file.EditOfficeFileDTO; import com.qiwenshare.file.dto.file.PreviewOfficeFileDTO; import com.qiwenshare.file.helper.ConfigManager; import com.qiwenshare.ufo.factory.UFOFactory; +import com.qiwenshare.ufo.operation.download.domain.DownloadFile; import com.qiwenshare.ufo.operation.write.Writer; import com.qiwenshare.ufo.operation.write.domain.WriteFile; import com.qiwenshare.ufo.util.PathUtil; @@ -259,22 +261,19 @@ public class OfficeController { if (loginUser == null) { throw new NotLoginException(); } - PrintWriter writer = null; - JSONObject jsonObj=null; - writer = response.getWriter(); + PrintWriter writer = response.getWriter(); Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\\A"); String body = scanner.hasNext() ? scanner.next() : ""; - jsonObj = JSON.parseObject(body); + JSONObject jsonObj = JSON.parseObject(body); log.info("===saveeditedfile:" + jsonObj.get("status")); ; - String status = jsonObj!=null?jsonObj.get("status").toString():""; + String status = jsonObj != null ? jsonObj.get("status").toString() : ""; if ("2".equals(status)) {//新建报告不强制手动操作时状态为2 String type = request.getParameter("type"); String downloadUri = (String) jsonObj.get("url"); if("edit".equals(type)){//修改报告 - log.debug("====文档编辑完成,现在开始保存编辑后的文档,其下载地址为:" + downloadUri); String fileId = request.getParameter("fileId"); String userFileId = request.getParameter("userFileId"); FileBean fileBean = fileService.getById(fileId); @@ -286,7 +285,7 @@ public class OfficeController { URL url = new URL(downloadUri); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); -// String md5Str = ""; + int fileLength = 0; try { InputStream stream = connection.getInputStream(); @@ -295,8 +294,6 @@ public class OfficeController { WriteFile writeFile = new WriteFile(); writeFile.setFileUrl(fileBean.getFileUrl()); - log.info("当前修改文件大小为:" + fileLength); -// log.info("当前修改文件md5为:" + md5Str); writeFile.setFileSize(connection.getContentLength()); writer1.write(stream, writeFile); } catch (Exception e) { @@ -310,10 +307,14 @@ public class OfficeController { userFileService.update(userFileUpdateWrapper); LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); fileLength = connection.getContentLength(); - log.info("当前修改文件大小为2222:" + Long.valueOf(fileLength)); + log.info("当前修改文件大小为:" + Long.valueOf(fileLength)); + DownloadFile downloadFile = new DownloadFile(); + downloadFile.setFileUrl(fileBean.getFileUrl()); + InputStream inputStream = ufoFactory.getDownloader(fileBean.getStorageType()).getInputStream(downloadFile); + String md5Str = DigestUtils.md5Hex(inputStream); lambdaUpdateWrapper -// .set(FileBean::getIdentifier, md5Str) + .set(FileBean::getIdentifier, md5Str) .set(FileBean::getFileSize, Long.valueOf(fileLength)) .eq(FileBean::getFileId, fileId); fileService.update(lambdaUpdateWrapper); From 41936bd595f36bb097fca6214a9cc5cb324ae94e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= <1162714483@qq.com> Date: Sun, 11 Jul 2021 17:37:51 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E6=97=B6=E6=98=BE=E7=A4=BA=E6=80=BB=E5=A4=A7=E5=B0=8F=EF=BC=8C?= =?UTF-8?q?=E5=92=8C=E8=BF=9B=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qiwenshare/file/service/FiletransferService.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/src/main/java/com/qiwenshare/file/service/FiletransferService.java index e040e76..96c757c 100644 --- a/src/main/java/com/qiwenshare/file/service/FiletransferService.java +++ b/src/main/java/com/qiwenshare/file/service/FiletransferService.java @@ -15,6 +15,7 @@ import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.qiwenshare.common.operation.FileOperation; import com.qiwenshare.common.util.DateUtil; import com.qiwenshare.common.util.FileUtil; @@ -135,7 +136,7 @@ public class FiletransferService implements IFiletransferService { downloadFile.setFileUrl(fileBean.getFileUrl()); downloadFile.setFileSize(fileBean.getFileSize()); - + httpServletResponse.setContentLengthLong(fileBean.getFileSize()); downloader.download(httpServletResponse, downloadFile); } else { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -147,9 +148,9 @@ public class FiletransferService implements IFiletransferService { String staticPath = PathUtil.getStaticPath(); String tempPath = staticPath + "temp" + File.separator; - File tempFile = new File(tempPath); - if (!tempFile.exists()) { - tempFile.mkdirs(); + File tempDirFile = new File(tempPath); + if (!tempDirFile.exists()) { + tempDirFile.mkdirs(); } FileOutputStream f = null; @@ -213,6 +214,8 @@ public class FiletransferService implements IFiletransferService { Downloader downloader = ufoFactory.getDownloader(StorageTypeEnum.LOCAL.getStorageType()); DownloadFile downloadFile = new DownloadFile(); downloadFile.setFileUrl("temp" + File.separator+userFile.getFileName() + ".zip"); + File tempFile = FileOperation.newFile(PathUtil.getStaticPath() + downloadFile.getFileUrl()); + httpServletResponse.setContentLengthLong(tempFile.length()); downloader.download(httpServletResponse, downloadFile); String zipPath = PathUtil.getStaticPath() + "temp" + File.separator+userFile.getFileName() + ".zip"; File file = new File(zipPath); From d735865b792226d8acf7869c3b82c2b4ce3b560b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= <1162714483@qq.com> Date: Sun, 11 Jul 2021 17:56:17 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0office=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=8D=8F=E5=90=8C=E7=BC=96=E8=BE=91=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/qiwenshare/file/controller/OfficeController.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/qiwenshare/file/controller/OfficeController.java b/src/main/java/com/qiwenshare/file/controller/OfficeController.java index 1197088..fa583e9 100644 --- a/src/main/java/com/qiwenshare/file/controller/OfficeController.java +++ b/src/main/java/com/qiwenshare/file/controller/OfficeController.java @@ -8,11 +8,9 @@ import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.util.DateUtil; import com.qiwenshare.file.anno.MyLog; import com.qiwenshare.file.api.IFileService; -import com.qiwenshare.file.api.IFiletransferService; import com.qiwenshare.file.api.IUserFileService; import com.qiwenshare.file.api.IUserService; import com.qiwenshare.file.domain.*; -import com.qiwenshare.file.dto.DownloadFileDTO; import com.qiwenshare.file.dto.file.CreateOfficeFileDTO; import com.qiwenshare.file.dto.file.EditOfficeFileDTO; import com.qiwenshare.file.dto.file.PreviewOfficeFileDTO; @@ -187,7 +185,7 @@ public class OfficeController { FileModel file = new FileModel(userFile.getFileName() + "." + userFile.getExtendName(), previewOfficeFileDTO.getPreviewUrl(), - String.valueOf(new Date().getTime()), + userFile.getUploadTime(), String.valueOf(loginUser.getUserId()), loginUser.getUsername(), "view"); @@ -228,7 +226,7 @@ public class OfficeController { FileModel file = new FileModel(userFile.getFileName() + "." + userFile.getExtendName(), editOfficeFileDTO.getPreviewUrl(), - String.valueOf(new Date().getTime()), + userFile.getUploadTime(), String.valueOf(loginUser.getUserId()), loginUser.getUsername(), "edit"); From 07ad2b7aca685eacd1f2814b7774a8ab2a0130b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= <1162714483@qq.com> Date: Sun, 11 Jul 2021 18:33:46 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=A0=A1=E9=AA=8C=EF=BC=8C=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E7=BD=91=E7=9B=98=E7=9A=84=E5=AE=89=E5=85=A8=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/component/FileDealComp.java | 60 ++++++++++++++++++- .../controller/FiletransferController.java | 48 +++++---------- .../qiwenshare/file/dto/DownloadFileDTO.java | 5 ++ 3 files changed, 77 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/qiwenshare/file/component/FileDealComp.java b/src/main/java/com/qiwenshare/file/component/FileDealComp.java index 10b093a..857774b 100644 --- a/src/main/java/com/qiwenshare/file/component/FileDealComp.java +++ b/src/main/java/com/qiwenshare/file/component/FileDealComp.java @@ -4,22 +4,25 @@ import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qiwenshare.common.constant.FileConstant; import com.qiwenshare.common.util.DateUtil; -import com.qiwenshare.file.api.IElasticSearchService; +import com.qiwenshare.file.api.*; import com.qiwenshare.file.config.es.FileSearch; -import com.qiwenshare.file.domain.TreeNode; -import com.qiwenshare.file.domain.UserFile; +import com.qiwenshare.file.domain.*; import com.qiwenshare.file.mapper.UserFileMapper; +import com.qiwenshare.file.service.UserService; import com.qiwenshare.file.vo.file.FileListVo; import com.qiwenshare.ufo.factory.UFOFactory; import com.qiwenshare.ufo.operation.read.Reader; import com.qiwenshare.ufo.operation.read.domain.ReadFile; import com.qiwenshare.ufo.util.PathUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Queue; import java.util.concurrent.Executor; import java.util.concurrent.Executors; @@ -32,6 +35,14 @@ import java.util.concurrent.Executors; public class FileDealComp { @Resource UserFileMapper userFileMapper; + @Resource + IUserService userService; + @Resource + IShareService shareService; + @Resource + IShareFileService shareFileService; + @Resource + IUserFileService userFileService; @Autowired private IElasticSearchService elasticSearchService; public static Executor exec = Executors.newFixedThreadPool(10); @@ -267,4 +278,47 @@ public class FileDealComp { } + + /** + * 根据用户传入的参数,判断是否有下载或者预览权限 + * @return + */ + public boolean checkAuthDownloadAndPreview(String shareBatchNum, + String extractionCode, + String token, + long userFileId) { + UserFile userFile = userFileService.getById(userFileId); + if ("undefined".equals(shareBatchNum) || StringUtils.isEmpty(shareBatchNum)) { + + UserBean sessionUserBean = userService.getUserBeanByToken(token); + if (sessionUserBean == null) { + return false; + } + if (userFile.getUserId() != sessionUserBean.getUserId()) { + return false; + } + } else { + Map param = new HashMap<>(); + param.put("shareBatchNum", shareBatchNum); + List shareList = shareService.listByMap(param); + //判断批次号 + if (shareList.size() <= 0) { + return false; + } + Integer shareType = shareList.get(0).getShareType(); + if (1 == shareType) { + //判断提取码 + if (!shareList.get(0).getExtractionCode().equals(extractionCode)) { + return false; + } + } + param.put("userFileId", userFileId); + List shareFileList = shareFileService.listByMap(param); + if (shareFileList.size() <= 0) { + return false; + } + + } + return true; + } } diff --git a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java index 33112c3..9dde32a 100644 --- a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java +++ b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java @@ -136,6 +136,14 @@ public class FiletransferController { @MyLog(operation = "下载文件", module = CURRENT_MODULE) @RequestMapping(value = "/downloadfile", method = RequestMethod.GET) public void downloadFile(HttpServletResponse httpServletResponse, DownloadFileDTO downloadFileDTO) { + boolean authResult = fileDealComp.checkAuthDownloadAndPreview(downloadFileDTO.getShareBatchNum(), + downloadFileDTO.getExtractionCode(), + downloadFileDTO.getToken(), + downloadFileDTO.getUserFileId()); + if (!authResult) { + log.error("没有权限下载!!!"); + return; + } httpServletResponse.setContentType("application/force-download");// 设置强制下载不打开 UserFile userFile = userFileService.getById(downloadFileDTO.getUserFileId()); String fileName = ""; @@ -160,39 +168,13 @@ public class FiletransferController { @GetMapping("/preview") public void preview(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, PreviewDTO previewDTO){ UserFile userFile = userFileService.getById(previewDTO.getUserFileId()); - - if ("undefined".equals(previewDTO.getShareBatchNum()) || StringUtils.isEmpty(previewDTO.getShareBatchNum())) { - - String token = previewDTO.getToken(); - UserBean sessionUserBean = userService.getUserBeanByToken(token); - if (sessionUserBean == null) { - return; - } - if (userFile.getUserId() != sessionUserBean.getUserId()) { - return; - } - } else { - - Map param = new HashMap<>(); - param.put("shareBatchNum", previewDTO.getShareBatchNum()); - List shareList = shareService.listByMap(param); - //判断批次号 - if (shareList.size() <= 0) { - return; - } - Integer shareType = shareList.get(0).getShareType(); - if (1 == shareType) { - //判断提取码 - String extractionCode = shareList.get(0).getExtractionCode(); - if (!extractionCode.equals(previewDTO.getExtractionCode())) { - return; - } - } - param.put("userFileId", previewDTO.getUserFileId()); - List shareFileList = shareFileService.listByMap(param); - if (shareFileList.size() <= 0) { - return; - } + boolean authResult = fileDealComp.checkAuthDownloadAndPreview(previewDTO.getShareBatchNum(), + previewDTO.getExtractionCode(), + previewDTO.getToken(), + previewDTO.getUserFileId()); + if (!authResult) { + log.error("没有权限预览!!!"); + return; } FileBean fileBean = fileService.getById(userFile.getFileId()); diff --git a/src/main/java/com/qiwenshare/file/dto/DownloadFileDTO.java b/src/main/java/com/qiwenshare/file/dto/DownloadFileDTO.java index 83c7ae9..c559445 100644 --- a/src/main/java/com/qiwenshare/file/dto/DownloadFileDTO.java +++ b/src/main/java/com/qiwenshare/file/dto/DownloadFileDTO.java @@ -7,4 +7,9 @@ import lombok.Data; @Schema(name = "下载文件DTO",required = true) public class DownloadFileDTO { private Long userFileId; + private String token; + @Schema(description="批次号") + private String shareBatchNum; + @Schema(description="提取码") + private String extractionCode; } From a61f18fbc58b7a15d760585db36b452c64d70d70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= <1162714483@qq.com> Date: Sun, 11 Jul 2021 19:42:59 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E6=96=B9=E5=BC=8F=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/qiwenshare/file/component/FileDealComp.java | 4 +++- .../file/controller/FiletransferController.java | 10 +++++++++- .../java/com/qiwenshare/file/dto/UploadFileDTO.java | 2 ++ .../qiwenshare/file/service/FiletransferService.java | 10 +++++++++- 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/qiwenshare/file/component/FileDealComp.java b/src/main/java/com/qiwenshare/file/component/FileDealComp.java index 857774b..fbe6f2a 100644 --- a/src/main/java/com/qiwenshare/file/component/FileDealComp.java +++ b/src/main/java/com/qiwenshare/file/component/FileDealComp.java @@ -99,7 +99,9 @@ public class FileDealComp { /** * 还原父文件路径 * - * 回收站文件还原操作会将文件恢复到原来的路径下,当还原文件的时候,如果父目录已经不存在了,则需要把父母录给还原 + * 1、回收站文件还原操作会将文件恢复到原来的路径下,当还原文件的时候,如果父目录已经不存在了,则需要把父母录给还原 + * 2、上传目录 + * * @param filePath * @param sessionUserId */ diff --git a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java index 9dde32a..a1c94ee 100644 --- a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java +++ b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java @@ -20,6 +20,7 @@ import com.qiwenshare.file.service.ShareService; import com.qiwenshare.file.service.StorageService; import com.qiwenshare.file.vo.file.FileListVo; import com.qiwenshare.file.vo.file.UploadFileVo; +import com.qiwenshare.ufo.util.PathUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; @@ -84,7 +85,14 @@ public class FiletransferController { UserFile userFile = new UserFile(); userFile.setUserId(sessionUserBean.getUserId()); - userFile.setFilePath(uploadFileDto.getFilePath()); + String relativePath = uploadFileDto.getRelativePath(); + if (StringUtils.isNotEmpty(relativePath)) { + userFile.setFilePath(uploadFileDto.getFilePath() + PathUtil.getParentPath(relativePath) + "/"); + fileDealComp.restoreParentFilePath(uploadFileDto.getFilePath() + PathUtil.getParentPath(relativePath) + "/", sessionUserBean.getUserId()); + } else { + userFile.setFilePath(uploadFileDto.getFilePath()); + } + String fileName = uploadFileDto.getFilename(); userFile.setFileName(FileUtil.getFileNameNotExtend(fileName)); userFile.setExtendName(FileUtil.getFileExtendName(fileName)); diff --git a/src/main/java/com/qiwenshare/file/dto/UploadFileDTO.java b/src/main/java/com/qiwenshare/file/dto/UploadFileDTO.java index b559af5..c7f4025 100644 --- a/src/main/java/com/qiwenshare/file/dto/UploadFileDTO.java +++ b/src/main/java/com/qiwenshare/file/dto/UploadFileDTO.java @@ -24,6 +24,8 @@ public class UploadFileDTO { @Schema(description = "切片大小") private long chunkSize; + @Schema(description = "相对路径") + private String relativePath; @Schema(description = "所有切片") private int totalChunks; diff --git a/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/src/main/java/com/qiwenshare/file/service/FiletransferService.java index 96c757c..9622435 100644 --- a/src/main/java/com/qiwenshare/file/service/FiletransferService.java +++ b/src/main/java/com/qiwenshare/file/service/FiletransferService.java @@ -15,6 +15,7 @@ import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.qiwenshare.common.constant.FileConstant; import com.qiwenshare.common.operation.FileOperation; import com.qiwenshare.common.util.DateUtil; @@ -46,6 +47,7 @@ import com.qiwenshare.ufo.operation.upload.Uploader; import com.qiwenshare.ufo.operation.upload.domain.UploadFile; import com.qiwenshare.ufo.util.PathUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -98,7 +100,13 @@ public class FiletransferService implements IFiletransferService { fileBean.setPointCount(1); fileMapper.insert(fileBean); UserFile userFile = new UserFile(); - userFile.setFilePath(uploadFileDto.getFilePath()); + String relativePath = uploadFileDto.getRelativePath(); + if (StringUtils.isNotEmpty(relativePath)) { + userFile.setFilePath(uploadFileDto.getFilePath() + PathUtil.getParentPath(relativePath) + "/"); + fileDealComp.restoreParentFilePath(uploadFileDto.getFilePath() + PathUtil.getParentPath(relativePath) + "/", userId); + } else { + userFile.setFilePath(uploadFileDto.getFilePath()); + } userFile.setUserId(userId); userFile.setFileName(uploadFile.getFileName()); userFile.setExtendName(uploadFile.getFileType());