package com.kidgrow.filecenter.config; import com.aliyun.oss.OSSClient; import com.aliyun.oss.common.auth.DefaultCredentialProvider; import com.aliyun.oss.model.GetObjectRequest; import com.aliyun.oss.model.OSSObject; 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; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import java.io.InputStream; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.UUID; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
* * @Description: 阿里云配置
* @Project:
* @CreateDate: Created in 2020/2/18 11:24
* @Author: liuke */ @Configuration @ConditionalOnProperty(name = "kidgrow.file-server.type", havingValue = "aliyun") public class AliyunOSSAutoConfigure { @Autowired private FileServerProperties fileProperties; /** * 阿里云文件存储client * 只有配置了aliyun.oss.access-key才可以使用 */ @Bean public OSSClient ossClient() { OSSClient ossClient = new OSSClient(fileProperties.getOss().getEndpoint() , new DefaultCredentialProvider(fileProperties.getOss().getAccessKey(), fileProperties.getOss().getAccessKeySecret()) , null); return ossClient; } @Service public class AliyunOssServiceImpl extends AbstractIFileService { @Autowired private OSSClient ossClient; @Autowired private HttpServletRequest httpServletRequest; @Override protected String fileType() { return fileProperties.getType(); } @Override protected void uploadFile(MultipartFile file, FileInfo fileInfo) throws Exception { String clientID= httpServletRequest.getHeader(SecurityConstants.CLIENT_HEADER); String folderByDate =DateUtil.formatDate(new Date()); int begin = file.getOriginalFilename().indexOf("."); int last = file.getOriginalFilename().length(); String fileType = file.getOriginalFilename().substring(begin, last); String fileName= UUID.randomUUID().toString().replaceAll("-","")+fileType; String fileFolder = ""; if(clientID.equals("hospital")){//医院端平台, fileFolder=FilePath(fileInfo.getImgType(),folderByDate,null,null); fileUpLoadOss(fileInfo,fileFolder + fileName,file.getInputStream()); } else { fileUpLoadOss(fileInfo,fileProperties.getOss().getFolder() + folderByDate + "/" + fileName,file.getInputStream()); } } @Override protected boolean deleteFile(FileInfo fileInfo) { 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); } public OSSObject down(String url){ GetObjectRequest request=new GetObjectRequest(fileProperties.getOss().getBucketName(),url); return ossClient.getObject(request); } /** * 组合sso上的文件路径 * @param imgType * @return */ public String FilePath(String imgType,String folderByDate,String hospitalId,String departmentId) { //返回的文件路径 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); if (org.apache.commons.lang3.StringUtils.isBlank(hospitalID)&& org.apache.commons.lang3.StringUtils.isBlank(depID)) { fileFolder = "Xray/" + hospitalID + "/" + depID + "/"+ folderByDate + "/"; }else { if (org.apache.commons.lang3.StringUtils.isBlank(hospitalId)&& org.apache.commons.lang3.StringUtils.isBlank(departmentId)) { fileFolder = "Xray/" + hospitalId + "/" + departmentId + "/"+ folderByDate + "/"; }else { fileFolder = "Xray/" + 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; } } }