From 67bc268ffdc203fd0f3081261c8778bd61a23541 Mon Sep 17 00:00:00 2001 From: liyj <1003249715@qq.com> Date: Sat, 31 Aug 2024 16:03:38 +0800 Subject: [PATCH] 1、新增附件管理模块 --- dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java | 140 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 140 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..340bf13 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,122 @@ @Autowired private FileInfoService service; + @Autowired + private FileRelateService fileRelateService; + @Autowired + private CustClientImpl custClient; + + /** + * 页面附件上传-文件流方式 + * @url {ctx}/api/web/fileInfo/upload/{ownerId}/{ownerType} + * @param ownerId 所属业务编号 + * @param ownerType 所属业务类型 + * @param request 请求头 + * @return Object + */ + @PostMapping("/upload/{ownerId}/{ownerType}") + public Object upload(@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.webPploadFile(file, 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