From be5e72f7f7b7edf047ea26c04e1fcf19052eeee8 Mon Sep 17 00:00:00 2001
From: liyj <1003249715@qq.com>
Date: Sat, 31 Aug 2024 17:14:44 +0800
Subject: [PATCH] 1、附件管理模块修改
---
dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java | 143 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 143 insertions(+), 0 deletions(-)
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java
index 088af92..1d1ab60 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java
@@ -1,19 +1,42 @@
package cn.huge.module.file.controller.web;
+import cn.huge.base.common.exception.ClientException;
+import cn.huge.base.common.utils.ContentTypeUtils;
import cn.huge.base.common.utils.ReturnFailUtils;
import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.base.config.CurrentUser;
+import cn.huge.module.client.api.impl.CustClientImpl;
+import cn.huge.module.constant.BaseConsts;
+import cn.huge.module.cust.dto.CtUserDTO;
+import cn.huge.module.file.domain.dto.UploaderDTO;
import cn.huge.module.file.domain.po.FileInfo;
import cn.huge.module.file.service.FileInfoService;
+import cn.huge.module.file.service.FileRelateService;
+import cn.huge.module.file.utils.FileUtils;
+import cn.huge.module.file.utils.FtpUtils;
+import cn.huge.module.sys.constant.FileOwnerTypeBaseEnum;
+import cn.huge.module.sys.dto.FileInfoBaseDTO;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -36,5 +59,125 @@
@Autowired
private FileInfoService service;
+ @Autowired
+ private FileRelateService fileRelateService;
+ @Autowired
+ private CustClientImpl custClient;
+
+ /**
+ * 页面附件上传-文件流方式
+ * @url {ctx}/api/web/fileInfo/upload/{mainId}/{ownerId}/{ownerType}
+ * @param mainId 所属业务主体编号
+ * @param ownerId 所属业务编号
+ * @param ownerType 所属业务类型
+ * @param request 请求头
+ * @return Object
+ */
+ @PostMapping("/upload/{ownerId}/{ownerType}")
+ public Object upload(@PathVariable(value = "mainId") String mainId,
+ @PathVariable(value = "ownerId") String ownerId,
+ @PathVariable(value = "ownerType") String ownerType,
+ @CurrentUser String userId, MultipartHttpServletRequest request) {
+ try{
+ CtUserDTO loginUser = custClient.clientGetUser(userId);
+ UploaderDTO uploaderDTO = new UploaderDTO();
+ BeanUtils.copyProperties(loginUser, uploaderDTO);
+ List<FileInfoBaseDTO> files = new ArrayList<>();
+ Iterator<String> itr = request.getFileNames();
+ int fileCount = fileRelateService.countByOwnerIdAndType(ownerId, ownerType)+1;
+ while (itr.hasNext()) {
+ MultipartFile file = request.getFile(itr.next());
+ if(file.getSize() > 30000000){
+ return ReturnFailUtils.getRepInfo("您上传的文件已超过30M大小限制!");
+ }else {
+ String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
+ if (FileUtils.checkFileSuffix(fileSuffix)) {
+ if (StringUtils.isEmpty(ownerType)) {
+ ownerType = FileOwnerTypeBaseEnum.OWNER_TYPE_000.getIndex();
+ }
+ FileInfo fileInfo = service.webUploadFile(file, mainId, ownerId, ownerType, fileCount, uploaderDTO);
+ FileInfoBaseDTO fileInfoBaseDTO = new FileInfoBaseDTO();
+ BeanUtils.copyProperties(fileInfo, fileInfoBaseDTO);
+ files.add(fileInfoBaseDTO);
+ fileCount++;
+ } else {
+ return ReturnFailUtils.getRepInfo("您上传的文件格式不正确!");
+ }
+ }
+ }
+ return ReturnSucUtils.getRepInfo( "上传成功!", files);
+ } catch (Exception e) {
+ return ReturnFailUtils.getRepInfo();
+ }
+ }
+
+ /**
+ * 在线查附件
+ * @url {ctx}/api/web/fileInfo/show/{id}
+ * @param id 附件编号
+ * @param response 响应头
+ * @throws Exception
+ */
+ @GetMapping("/show/{id}")
+ public void show(@PathVariable(value = "id") String id, HttpServletResponse response){
+ try {
+ FileInfo fileInfo = service.getById(id);
+ response.reset();
+ String contentType = ContentTypeUtils.getContentType(fileInfo.getSuffix());
+ response.setContentType(contentType);
+ OutputStream outputStream = response.getOutputStream();
+ FtpUtils ftpUtil = new FtpUtils();
+ InputStream inputStream = ftpUtil.retrieveFileStream(fileInfo.getFullPath());
+
+// double fileSize = fileInfo.getSize(); // 文件大小
+ int chunkSize = 512 * 1024; // 分块大小( KB)
+ byte[] buffer = new byte[chunkSize];
+ int bytesRead;
+
+ // 循环读取和发送文件的各个部分
+ while ((bytesRead = inputStream.read(buffer)) != -1) {
+ outputStream.write(buffer, 0, bytesRead);
+ outputStream.flush();
+ }
+
+// IOUtils.copy(inputStream, outputStream, chunkSize);
+ //关闭流
+ IOUtils.closeQuietly(inputStream);
+ IOUtils.closeQuietly(outputStream);
+ } catch (Exception e) {
+ log.error("controller接口[FileInfoWebController.show]请求异常:"+e, e);
+ throw new ClientException("FileInfoWebController.show", e);
+ }
+ }
+
+ /**
+ * 在线下载附件-文件流方式
+ * @url {ctx}/api/web/fileInfo/down/{id}
+ * @param id 附件编号
+ * @param response 响应头
+ */
+ @GetMapping("/down/{id}")
+ public void down(@PathVariable(value = "id") String id, HttpServletResponse response){
+ try {
+ FileInfo fileInfo = service.getById(id);
+ String contentType = ContentTypeUtils.getContentType(fileInfo.getSuffix());
+ response.setContentType(contentType);
+ String fileName = URLEncoder.encode(fileInfo.getName() + BaseConsts.DOT + fileInfo.getSuffix(), "UTF-8");
+ response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
+ OutputStream outputStream = response.getOutputStream();
+ FtpUtils ftpUtil = new FtpUtils();
+ InputStream inputStream = ftpUtil.retrieveFileStream(fileInfo.getFullPath());
+ IOUtils.copy(inputStream, outputStream);
+ //关闭流
+ IOUtils.closeQuietly(inputStream);
+ IOUtils.closeQuietly(outputStream);
+ } catch (Exception e) {
+ log.error("controller接口[FileInfoWebController.down]请求异常:"+e, e);
+ throw new ClientException("FileInfoWebController.down", e);
+ }
+ }
+
+
+
}
--
Gitblit v1.8.0