From c0f1364ad8451bd4ac5df064c2e0fbe33370d2bf Mon Sep 17 00:00:00 2001 From: MAC <1162714483@qq.com> Date: Sat, 1 Jan 2022 21:12:12 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=85=AC=E5=91=8A):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=85=AC=E5=91=8A=E5=9B=BE=E7=89=87=E9=A2=84=E8=A7=88=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/api/IFiletransferService.java | 1 + .../file/component/FileDealComp.java | 6 +- .../controller/FiletransferController.java | 34 +++++++++-- .../qiwenshare/file/domain/PictureFile.java | 60 +++++++++++++++++++ .../file/dto/file/DownloadFileDTO.java | 1 - .../qiwenshare/file/dto/file/PreviewDTO.java | 3 +- .../file/mapper/PictureFileMapper.java | 7 +++ .../file/service/FiletransferService.java | 54 +++++++++++++++-- .../qiwenshare/file/service/UserService.java | 1 + src/main/resources/import.sql | 2 +- 10 files changed, 154 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/qiwenshare/file/domain/PictureFile.java create mode 100644 src/main/java/com/qiwenshare/file/mapper/PictureFileMapper.java diff --git a/src/main/java/com/qiwenshare/file/api/IFiletransferService.java b/src/main/java/com/qiwenshare/file/api/IFiletransferService.java index 203076a..c6f147c 100644 --- a/src/main/java/com/qiwenshare/file/api/IFiletransferService.java +++ b/src/main/java/com/qiwenshare/file/api/IFiletransferService.java @@ -18,6 +18,7 @@ public interface IFiletransferService { void downloadFile(HttpServletResponse httpServletResponse, DownloadFileDTO downloadFileDTO); void previewFile(HttpServletResponse httpServletResponse, PreviewDTO previewDTO); + void previewPictureFile(HttpServletResponse httpServletResponse, PreviewDTO previewDTO); void deleteFile(FileBean fileBean); Long selectStorageSizeByUserId(Long userId); diff --git a/src/main/java/com/qiwenshare/file/component/FileDealComp.java b/src/main/java/com/qiwenshare/file/component/FileDealComp.java index a69e20a..ad487b6 100644 --- a/src/main/java/com/qiwenshare/file/component/FileDealComp.java +++ b/src/main/java/com/qiwenshare/file/component/FileDealComp.java @@ -299,8 +299,12 @@ public class FileDealComp { public boolean checkAuthDownloadAndPreview(String shareBatchNum, String extractionCode, String token, - long userFileId) { + Long userFileId, + Integer platform) { log.debug("权限检查开始:shareBatchNum:{}, extractionCode:{}, token:{}, userFileId{}" , shareBatchNum, extractionCode, token, userFileId); + if (platform != null && platform == 2) { + return true; + } UserFile userFile = userFileService.getById(userFileId); log.debug(JSON.toJSONString(userFile)); if ("undefined".equals(shareBatchNum) || StringUtils.isEmpty(shareBatchNum)) { diff --git a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java index 44cdfd4..c05cba6 100644 --- a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java +++ b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java @@ -30,6 +30,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.imageio.ImageIO; +import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; @@ -107,11 +108,18 @@ public class FiletransferController { @Operation(summary = "下载文件", description = "下载文件接口", tags = {"filetransfer"}) @MyLog(operation = "下载文件", module = CURRENT_MODULE) @RequestMapping(value = "/downloadfile", method = RequestMethod.GET) - public void downloadFile(HttpServletResponse httpServletResponse, DownloadFileDTO downloadFileDTO) { + public void downloadFile(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, DownloadFileDTO downloadFileDTO) { + Cookie[] cookieArr = httpServletRequest.getCookies(); + String token = ""; + for (Cookie cookie : cookieArr) { + if ("token".equals(cookie.getName())) { + token = cookie.getValue(); + } + } boolean authResult = fileDealComp.checkAuthDownloadAndPreview(downloadFileDTO.getShareBatchNum(), downloadFileDTO.getExtractionCode(), - downloadFileDTO.getToken(), - downloadFileDTO.getUserFileId()); + token, + downloadFileDTO.getUserFileId(), null); if (!authResult) { log.error("没有权限下载!!!"); return; @@ -139,11 +147,26 @@ public class FiletransferController { @Operation(summary="预览文件", description="用于文件预览", tags = {"filetransfer"}) @GetMapping("/preview") public void preview(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, PreviewDTO previewDTO){ + + if (previewDTO.getPlatform() != null && previewDTO.getPlatform() == 2) { + filetransferService.previewPictureFile(httpServletResponse, previewDTO); + return ; + } + + Cookie[] cookieArr = httpServletRequest.getCookies(); + String token = ""; + for (Cookie cookie : cookieArr) { + if ("token".equals(cookie.getName())) { + token = cookie.getValue(); + } + } + UserFile userFile = userFileService.getById(previewDTO.getUserFileId()); boolean authResult = fileDealComp.checkAuthDownloadAndPreview(previewDTO.getShareBatchNum(), previewDTO.getExtractionCode(), - previewDTO.getToken(), - previewDTO.getUserFileId()); + token, + previewDTO.getUserFileId(), + previewDTO.getPlatform()); if (!authResult) { log.error("没有权限预览!!!"); @@ -198,7 +221,6 @@ public class FiletransferController { filetransferService.previewFile(httpServletResponse, previewDTO); - } @Operation(summary = "获取存储信息", description = "获取存储信息", tags = {"filetransfer"}) diff --git a/src/main/java/com/qiwenshare/file/domain/PictureFile.java b/src/main/java/com/qiwenshare/file/domain/PictureFile.java new file mode 100644 index 0000000..a9b4d5f --- /dev/null +++ b/src/main/java/com/qiwenshare/file/domain/PictureFile.java @@ -0,0 +1,60 @@ +package com.qiwenshare.file.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import javax.persistence.*; + +/** + * @author MAC + * @version 1.0 + * @description: TODO + * @date 2022/1/1 19:06 + */ +@Data +@Table(name = "picturefile") +@Entity +@TableName("picturefile") +public class PictureFile { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @TableId(type = IdType.AUTO) + @Column(columnDefinition="bigint(20)") + private Long pictureFileId; + + @Column(columnDefinition="varchar(500) comment '文件url'") + private String fileUrl; + + @Column(columnDefinition="bigint(10) comment '文件大小'") + private Long fileSize; + + @Column(columnDefinition="int(1) comment '存储类型'") + private Integer storageType; + + @Column(columnDefinition = "bigint(20) comment '用户id'") + private Long userId; + + @Column(columnDefinition="varchar(100) comment '文件名'") + private String fileName; + + @Column(columnDefinition="varchar(100) comment '扩展名'") + private String extendName; + + @Column(columnDefinition="varchar(25) comment '创建时间'") + private String createTime; + + @Column(columnDefinition="bigint(20) comment '创建用户id'") + private Long createUserId; + + @Column(columnDefinition="varchar(25) comment '修改时间'") + private String modifyTime; + + @Column(columnDefinition="bigint(20) comment '修改用户id'") + private Long modifyUserId; + + + +} diff --git a/src/main/java/com/qiwenshare/file/dto/file/DownloadFileDTO.java b/src/main/java/com/qiwenshare/file/dto/file/DownloadFileDTO.java index e339428..e657749 100644 --- a/src/main/java/com/qiwenshare/file/dto/file/DownloadFileDTO.java +++ b/src/main/java/com/qiwenshare/file/dto/file/DownloadFileDTO.java @@ -7,7 +7,6 @@ import lombok.Data; @Schema(name = "下载文件DTO",required = true) public class DownloadFileDTO { private long userFileId; - private String token; @Schema(description="批次号") private String shareBatchNum; @Schema(description="提取码") diff --git a/src/main/java/com/qiwenshare/file/dto/file/PreviewDTO.java b/src/main/java/com/qiwenshare/file/dto/file/PreviewDTO.java index cb37f21..64c909d 100644 --- a/src/main/java/com/qiwenshare/file/dto/file/PreviewDTO.java +++ b/src/main/java/com/qiwenshare/file/dto/file/PreviewDTO.java @@ -7,10 +7,11 @@ import lombok.Data; @Schema(name = "预览文件DTO",required = true) public class PreviewDTO { private Long userFileId; - private String token; @Schema(description="批次号") private String shareBatchNum; @Schema(description="提取码") private String extractionCode; private String isMin; + private Integer platform; + private String url; } diff --git a/src/main/java/com/qiwenshare/file/mapper/PictureFileMapper.java b/src/main/java/com/qiwenshare/file/mapper/PictureFileMapper.java new file mode 100644 index 0000000..d8e8bc6 --- /dev/null +++ b/src/main/java/com/qiwenshare/file/mapper/PictureFileMapper.java @@ -0,0 +1,7 @@ +package com.qiwenshare.file.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qiwenshare.file.domain.PictureFile; + +public interface PictureFileMapper extends BaseMapper { +} diff --git a/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/src/main/java/com/qiwenshare/file/service/FiletransferService.java index 835a580..39b0cbf 100644 --- a/src/main/java/com/qiwenshare/file/service/FiletransferService.java +++ b/src/main/java/com/qiwenshare/file/service/FiletransferService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.qiwenshare.common.util.DateUtil; +import com.qiwenshare.common.util.MimeUtils; import com.qiwenshare.file.api.IFiletransferService; import com.qiwenshare.file.component.FileDealComp; import com.qiwenshare.file.config.security.user.JwtUser; @@ -40,6 +41,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.*; +import java.util.Base64; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -70,6 +72,8 @@ public class FiletransferService implements IFiletransferService { @Resource ImageMapper imageMapper; + @Resource + PictureFileMapper pictureFileMapper; @Override @@ -387,15 +391,55 @@ public class FiletransferService implements IFiletransferService { previewer.imageOriginalPreview(httpServletResponse, previewFile); } } catch (Exception e){ - //org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。 - if (e.getMessage().contains("ClientAbortException")) { - //该异常忽略不做处理 - } else { - log.error("预览文件出现异常:{}", e.getMessage()); + //org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。 + if (e.getMessage().contains("ClientAbortException")) { + //该异常忽略不做处理 + } else { + log.error("预览文件出现异常:{}", e.getMessage()); + } + } } + @Override + public void previewPictureFile(HttpServletResponse httpServletResponse, PreviewDTO previewDTO) { + byte[] bytesUrl = Base64.getDecoder().decode(previewDTO.getUrl()); + PictureFile pictureFile = new PictureFile(); + pictureFile.setFileUrl(new String(bytesUrl)); + pictureFile = pictureFileMapper.selectOne(new QueryWrapper<>(pictureFile)); + Previewer previewer = ufopFactory.getPreviewer(pictureFile.getStorageType()); + if (previewer == null) { + log.error("预览失败,文件存储类型不支持预览,storageType:{}", pictureFile.getStorageType()); + throw new UploadException("预览失败"); + } + PreviewFile previewFile = new PreviewFile(); + previewFile.setFileUrl(pictureFile.getFileUrl()); + previewFile.setFileSize(pictureFile.getFileSize()); + try { + + String mime= MimeUtils.getMime(pictureFile.getExtendName()); + httpServletResponse.setHeader("Content-Type", mime); + + String fileName = pictureFile.getFileName() + "." + pictureFile.getExtendName(); + try { + fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + httpServletResponse.addHeader("Content-Disposition", "fileName=" + fileName);// 设置文件名 + + previewer.imageOriginalPreview(httpServletResponse, previewFile); + } catch (Exception e){ + //org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。 + if (e.getMessage().contains("ClientAbortException")) { + //该异常忽略不做处理 + } else { + log.error("预览文件出现异常:{}", e.getMessage()); + } + + } } @Override diff --git a/src/main/java/com/qiwenshare/file/service/UserService.java b/src/main/java/com/qiwenshare/file/service/UserService.java index 64516c6..f9e1ae5 100644 --- a/src/main/java/com/qiwenshare/file/service/UserService.java +++ b/src/main/java/com/qiwenshare/file/service/UserService.java @@ -48,6 +48,7 @@ public class UserService extends ServiceImpl implements IU return null; } token = token.replace("Bearer ", ""); + token = token.replace("Bearer%20", ""); try { c = jwtComp.parseJWT(token); } catch (Exception e) { diff --git a/src/main/resources/import.sql b/src/main/resources/import.sql index 1994f43..4df6c2d 100644 --- a/src/main/resources/import.sql +++ b/src/main/resources/import.sql @@ -10,7 +10,7 @@ insert into sysparam (sysParamId, sysParamKey, sysParamValue, sysParamDesc) valu insert into sysparam (sysParamId, sysParamKey, sysParamValue, sysParamDesc) values (2, 'initDataFlag', '1', '系统初始化数据标识'); insert into sysparam (sysParamId, sysParamKey, sysParamValue, sysParamDesc) values (3, 'version', '1.1.2', '当前脚本的版本号'); -delete from filetype where fileTypeId in (0, 1, 2, 3, 4, 5) +delete from filetype where fileTypeId in (0, 1, 2, 3, 4, 5); INSERT INTO `filetype` (`fileTypeId`, `fileTypeName`) VALUES (0, '全部'); INSERT INTO `filetype` (`fileTypeId`, `fileTypeName`) VALUES (1, '图片'); INSERT INTO `filetype` (`fileTypeId`, `fileTypeName`) VALUES (2, '文档');