package com.kidgrow.filecenter.config;
import com.aliyun.oss.OSSClient;
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;
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.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);
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);
}
/**
* 组合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;
}
}
}