From 6557baac627dce769c2b05ab482e4daf262a88ac Mon Sep 17 00:00:00 2001 From: houruijun <411269194@kidgrow.com> Date: Wed, 17 Jun 2020 17:34:01 +0800 Subject: [PATCH] 1.增加工具类 MultipartFileUtils ,支持将MultipartFile类型转换为file类型 2.增加缩略图相关全局配置变量:宽高和生成缩略图的暂存目录(缩略图上传成功后会删除) 3.修改文件上传中心的上传代码,将生成目录和aliyun上传方法抽离独立 4.增加医院logo上传支持接口(可返回缩略图地址) 5.修改登录后回去用户信息不完整bug --- kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/AliyunOSSAutoConfigure.java | 75 +++++++++----- kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/controller/FileController.java | 12 ++ kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysUserMapper.xml | 2 kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/impl/AbstractIFileService.java | 67 ++++++++++++ kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java | 7 kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/CommonConstant.java | 12 ++ kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/FastdfsAutoConfigure.java | 12 ++ kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/IFileService.java | 9 + kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/QiniuOSSAutoConfigure.java | 12 ++ kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/model/DoctorUserAll.java | 9 + kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/MultipartFileUtils.java | 61 ++++++++++++ 11 files changed, 244 insertions(+), 34 deletions(-) diff --git a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/IFileService.java b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/IFileService.java index b3311a4..2f72f50 100644 --- a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/IFileService.java +++ b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/IFileService.java @@ -23,4 +23,13 @@ PageResult<FileInfo> findList(Map<String, Object> params); void delete(String id); + + /** + * 上传图片-并缩略,其实是给文件服务器存储了两个文件 一个原文件 一个缩略图文件 + * @param file form内的文件数据 + * @param imgType 业务类型 例如logo + * @return 返回的实体中 path字段保存的是缩略图地址 + * @throws Exception + */ + FileInfo uploadForThumbnails(MultipartFile file ,String imgType) throws Exception; } diff --git a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/impl/AbstractIFileService.java b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/impl/AbstractIFileService.java index 527487e..0fbab5b 100644 --- a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/impl/AbstractIFileService.java +++ b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/impl/AbstractIFileService.java @@ -1,19 +1,27 @@ package com.kidgrow.filecenter.service.impl; +import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - +import com.kidgrow.common.constant.CommonConstant; import com.kidgrow.common.model.PageResult; +import com.kidgrow.common.utils.DateUtil; +import com.kidgrow.common.utils.MultipartFileUtils; +import com.kidgrow.common.utils.RandomValueUtils; +import com.kidgrow.common.utils.StringUtils; import com.kidgrow.filecenter.mapper.FileMapper; import com.kidgrow.filecenter.model.FileInfo; import com.kidgrow.filecenter.service.IFileService; import com.kidgrow.filecenter.util.FileUtil; - import lombok.extern.slf4j.Slf4j; - +import net.coobird.thumbnailator.Thumbnails; import org.apache.commons.collections4.MapUtils; import org.springframework.web.multipart.MultipartFile; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.Date; import java.util.List; import java.util.Map; @@ -82,6 +90,8 @@ * @param fileInfo */ protected abstract void uploadFile(MultipartFile file, FileInfo fileInfo) throws Exception; + protected abstract void fileUpLoadOss(FileInfo fileInfo,String newFilePath, InputStream fileStream); + protected abstract String FilePath(String imgType,String folderByDate); /** * 删除文件 @@ -110,5 +120,56 @@ List<FileInfo> list = baseMapper.findList(page, params); return PageResult.<FileInfo>builder().data(list).code(0).count(page.getTotal()).build(); } + /** + * 上传图片-并缩略,其实是给文件服务器存储了两个文件 一个原文件 一个缩略图文件 + * @param file form内的文件数据 + * @param imgType 业务类型 例如logo + * @return 返回的实体中 path字段保存的是缩略图地址 + * @throws Exception + */ + @Override + public FileInfo uploadForThumbnails(MultipartFile file, String imgType) throws Exception { + FileInfo fileInfo=this.upload(file,imgType); + if (StringUtils.isNotBlank(fileInfo.getUrl())) { + //生成缩略图上传 + File nowFile= MultipartFileUtils.multipartFileToFile(file); + //暂存目录 发布后真实存在的磁盘目录 + String result = CommonConstant.TEMP_IMAGE_PATH; + //文件扩展名 + String suffix=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + String newFileName= RandomValueUtils.uuid()+suffix; + //生成缩略图 + Thumbnails.of(nowFile).size(CommonConstant.TH_IMG_WIDTH, CommonConstant.TH_IMG_HEIGHT).toFile(result+newFileName); + File thuFile= new File(result+newFileName); + if (thuFile.exists()) { + //将生成的文件转换为流 + InputStream inputStream=new FileInputStream(new File(result+newFileName)); + String folderByDate = DateUtil.formatDate(new Date()); + String filefloder=this.FilePath(imgType,folderByDate); + FileInfo newfileInfo=new FileInfo(); + newfileInfo.setName(newFileName); + newfileInfo.setId(IdUtil.fastSimpleUUID()); + newfileInfo.setSize(thuFile.length()); + newfileInfo.setIsImg(true); + newfileInfo.setContentType(file.getContentType()); + newfileInfo.setSource(fileInfo.getSource()); + newfileInfo.setImgType(imgType); + newfileInfo.setCreateTime(new Date()); + //文件上传到oss + this.fileUpLoadOss(newfileInfo,filefloder+newFileName,inputStream); + // 将文件信息保存到数据库 + baseMapper.insert(newfileInfo); + fileInfo.setPath(newfileInfo.getUrl()); + //删除暂存文件 + MultipartFileUtils.delteTempFile(thuFile); + inputStream.close(); + } + return fileInfo; + } + else + { + return fileInfo; + } + } } diff --git a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/AliyunOSSAutoConfigure.java b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/AliyunOSSAutoConfigure.java index ec404eb..029a41b 100644 --- a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/AliyunOSSAutoConfigure.java +++ b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/AliyunOSSAutoConfigure.java @@ -4,6 +4,7 @@ import com.aliyun.oss.common.auth.DefaultCredentialProvider; import com.kidgrow.common.constant.SecurityConstants; import com.kidgrow.common.utils.DateUtil; +import com.kidgrow.common.utils.StringUtils; import com.kidgrow.filecenter.model.FileInfo; import com.kidgrow.filecenter.properties.FileServerProperties; import com.kidgrow.filecenter.service.impl.AbstractIFileService; @@ -15,6 +16,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; +import java.io.InputStream; import java.util.Date; import java.util.UUID; @@ -69,35 +71,11 @@ String fileName= UUID.randomUUID().toString().replaceAll("-","")+fileType; String fileFolder = ""; if(clientID.equals("hospital")){//医院端平台, - - if ((fileInfo.getImgType() != null)) { - // 光片需要按照根据医院ID,科室ID,日期进行OSS存储 - if (fileInfo.getImgType().toLowerCase().equals("xray")) { - String hospitalID = httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_ID_HEADER); - String depID = httpServletRequest.getHeader(SecurityConstants.USER_DEP_ID_HEADER); - fileFolder = "Xray/" + hospitalID + "/" + depID + "/"+ folderByDate + "/"; - } - // 医院Logo只保存在一个目录中 - else if (fileInfo.getImgType().toLowerCase().equals("logo")) { - fileFolder = "HospitalLogo/"; - }else if (fileInfo.getImgType().toLowerCase().equals("doctor")) { - fileFolder = "DoctorImage/"; - } - else { - fileFolder = "OtherImage/"+ folderByDate + "/"; - } - - } else { - fileFolder = "OtherImage/"+ folderByDate + "/"; - } - - ossClient.putObject(fileProperties.getOss().getBucketName(), fileFolder + fileName, file.getInputStream()); - fileInfo.setUrl(fileProperties.getOss().getDomain() + fileFolder + fileName); - + fileFolder=FilePath(fileInfo.getImgType(),folderByDate); + fileUpLoadOss(fileInfo,fileFolder + fileName,file.getInputStream()); } else { - ossClient.putObject(fileProperties.getOss().getBucketName(), fileProperties.getOss().getFolder() + folderByDate + "/" + fileName, file.getInputStream()); - fileInfo.setUrl(fileProperties.getOss().getDomain() + fileProperties.getOss().getFolder() + folderByDate + "/" + fileName); + fileUpLoadOss(fileInfo,fileProperties.getOss().getFolder() + folderByDate + "/" + fileName,file.getInputStream()); } } @@ -107,5 +85,48 @@ ossClient.deleteObject(fileProperties.getOss().getBucketName(), fileInfo.getName()); return true; } + + /** + * 给OSS上上传文件 + * @param fileInfo 返回对象 + * @param newFilePath 上传到的文件路径 + * @param fileStream 要上传的文件流 + */ + public void fileUpLoadOss(FileInfo fileInfo,String newFilePath, InputStream fileStream) + { + ossClient.putObject(fileProperties.getOss().getBucketName(), newFilePath, fileStream); + fileInfo.setUrl(fileProperties.getOss().getDomain() + newFilePath); + } + /** + * 组合sso上的文件路径 + * @param imgType + * @return + */ + public String FilePath(String imgType,String folderByDate) + { + //返回的文件路径 + String fileFolder=""; + if (StringUtils.isNotBlank(imgType)) { + // 光片需要按照根据医院ID,科室ID,日期进行OSS存储 + if (imgType.toLowerCase().equals("xray")) { + String hospitalID = httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_ID_HEADER); + String depID = httpServletRequest.getHeader(SecurityConstants.USER_DEP_ID_HEADER); + fileFolder = "Xray/" + hospitalID + "/" + depID + "/"+ folderByDate + "/"; + } + // 医院Logo只保存在一个目录中 + else if (imgType.toLowerCase().equals("logo")) { + fileFolder = "HospitalLogo/"; + }else if (imgType.toLowerCase().equals("doctor")) { + fileFolder = "DoctorImage/"; + } + else { + fileFolder = "OtherImage/"+ folderByDate + "/"; + } + + } else { + fileFolder = "OtherImage/"+ folderByDate + "/"; + } + return fileFolder; + } } } diff --git a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/FastdfsAutoConfigure.java b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/FastdfsAutoConfigure.java index 2150754..9e5ed3c 100644 --- a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/FastdfsAutoConfigure.java +++ b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/FastdfsAutoConfigure.java @@ -13,6 +13,8 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import java.io.InputStream; + /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> * @@ -45,6 +47,16 @@ } @Override + protected void fileUpLoadOss(FileInfo fileInfo, String newFilePath, InputStream fileStream) { + + } + + @Override + protected String FilePath(String imgType, String folderByDate) { + return null; + } + + @Override protected boolean deleteFile(FileInfo fileInfo) { if (fileInfo != null && StrUtil.isNotEmpty(fileInfo.getPath())) { StorePath storePath = StorePath.parseFromUrl(fileInfo.getPath()); diff --git a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/QiniuOSSAutoConfigure.java b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/QiniuOSSAutoConfigure.java index e82a167..ceea920 100644 --- a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/QiniuOSSAutoConfigure.java +++ b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/QiniuOSSAutoConfigure.java @@ -17,6 +17,8 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import java.io.InputStream; + /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> * @@ -88,6 +90,16 @@ } @Override + protected void fileUpLoadOss(FileInfo fileInfo, String newFilePath, InputStream fileStream) { + + } + + @Override + protected String FilePath(String imgType, String folderByDate) { + return null; + } + + @Override protected boolean deleteFile(FileInfo fileInfo) { try { Response response = bucketManager.delete(fileProperties.getOss().getBucketName(), fileInfo.getPath()); diff --git a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/controller/FileController.java b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/controller/FileController.java index a599efa..0fdd274 100644 --- a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/controller/FileController.java +++ b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/controller/FileController.java @@ -50,7 +50,17 @@ public FileInfo feignUpload(@RequestPart("file") MultipartFile file,@RequestParam String imgType) throws Exception { return fileService.upload(file,imgType); } - + /** + * 文件上传 返回带缩略图地址的对象,缩略图在path字段 + * + * @param file + * @return + * @throws Exception + */ + @PostMapping(value="/files-thupload",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public FileInfo thUpload(@RequestPart("file") MultipartFile file,@RequestParam String imgType) throws Exception { + return fileService.uploadForThumbnails(file,imgType); + } /** * 文件删除 diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java index ff57dbc..4b67902 100644 --- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java +++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java @@ -139,11 +139,12 @@ //是否医院管理员 com.kidgrow.usercenter.model.SysDoctor sysDoctor = findDoctorByUserId(sysUser.getId()); if (sysDoctor.getIsAdminUser() != null) { - sysUser.setHAdminUser(sysDoctor.getIsAdminUser()); + loginAppUser.setHAdminUser(sysDoctor.getIsAdminUser()); } //医院信息 只有H端要返回的信息 - if (sysUser.getTenantId() == CommonConstant.H_TENANT) { - sysUser.setDoctorUserAllVO(baseMapper.findDoctorUserAllData(sysUser.getId())); + if (sysUser.getTenantId().toLowerCase().equals(CommonConstant.H_TENANT.toLowerCase())) { + DoctorUserAll doctorUserAllVo=baseMapper.findDoctorUserAllData(sysUser.getId()); + loginAppUser.setDoctorUserAllVO(doctorUserAllVo); } } return loginAppUser; diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysUserMapper.xml b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysUserMapper.xml index 7d9be46..a6664dd 100644 --- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysUserMapper.xml +++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysUserMapper.xml @@ -114,6 +114,7 @@ sysdoctor.enabled docenabled, sysdoctor.is_del docdel, + syshos.id hospital_id, syshos.hospital_name, syshos.hospital_short_name, syshos.hospital_type_name, @@ -133,6 +134,7 @@ syshos.is_del hosdel, syshos.accounts_count, + sysdep.id department_id, sysdep.department_name, sysdep.server_user_name, sysdep.server_user_tel, diff --git a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/CommonConstant.java b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/CommonConstant.java index d6561b8..ad692d6 100644 --- a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/CommonConstant.java +++ b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/CommonConstant.java @@ -235,4 +235,16 @@ * 签名结果 KEY */ public static final String SIGN_SIGN_KEY = "sign"; + /** + * logo缩略图默认宽 + */ + public static final Integer TH_IMG_WIDTH = 300; + /** + * logo缩略图默认高 + */ + public static final Integer TH_IMG_HEIGHT = 150; + /** + * 生成缩略图需要的图片暂存目录 + */ + public static final String TEMP_IMAGE_PATH="D:/resources/images/"; } diff --git a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/model/DoctorUserAll.java b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/model/DoctorUserAll.java index e5fc6f0..d4a106c 100644 --- a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/model/DoctorUserAll.java +++ b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/model/DoctorUserAll.java @@ -71,6 +71,10 @@ /** + * 医院id + */ + private String hospitalId; + /** * 医院名称 同组织名字 */ private String hospitalName; @@ -146,6 +150,11 @@ /** * 科室/部门名称 同组织名称 */ + private String departmentId; + + /** + * 科室/部门名称 同组织名称 + */ private String departmentName; /** * 销售代表的名字 diff --git a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/MultipartFileUtils.java b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/MultipartFileUtils.java new file mode 100644 index 0000000..e2b6702 --- /dev/null +++ b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/MultipartFileUtils.java @@ -0,0 +1,61 @@ +package com.kidgrow.common.utils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * MultipartFile转换帮助类 + */ +public class MultipartFileUtils { + /** + * MultipartFile 转 File + * + * @param file + * @throws Exception + */ + public static File multipartFileToFile(MultipartFile file) throws Exception { + + File toFile = null; + if (file.equals("") || file.getSize() <= 0) { + file = null; + } else { + InputStream ins = null; + ins = file.getInputStream(); + toFile = new File(file.getOriginalFilename()); + inputStreamToFile(ins, toFile); + ins.close(); + } + return toFile; + } + + //获取流文件 + private static void inputStreamToFile(InputStream ins, File file) { + try { + OutputStream os = new FileOutputStream(file); + int bytesRead = 0; + byte[] buffer = new byte[8192]; + while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { + os.write(buffer, 0, bytesRead); + } + os.close(); + ins.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 删除本地临时文件 + * + * @param file + */ + public static void delteTempFile(File file) { + if (file != null) { + File del = new File(file.toURI()); + del.delete(); + } + } +} -- Gitblit v1.8.0