package com.kidgrow.filecenter.config;
/**
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
*
* @Description:
* @Project:
* @CreateDate: Created in 2021/2/22 09:36
* @Author: liuke
*/
import com.aliyun.oss.model.OSSObject;
import com.kidgrow.common.constant.CommonConstant;
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.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
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.*;
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 = "harddisk")
public class HardDiskAutoConfigure {
@Autowired
private FileServerProperties fileProperties;
@Service
public class HardDiskServiceImpl extends AbstractIFileService {
@Autowired
private HttpServletRequest httpServletRequest;
@Override
protected String fileType() {
return fileProperties.getType();
}
@Value("${spring.profiles.active}")
private String OssPathEn;
@Value("${kidgrow.file-server.fdfs.web-url}")
private String FileWebUrl;
@Value("${server.port}")
private String ServerPort;
@Override
protected void uploadFile(MultipartFile file, FileInfo fileInfo) throws Exception {
String clientID = httpServletRequest.getHeader(SecurityConstants.CLIENT_HEADER);
String hospitalID = httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_ID_HEADER);
String depID = httpServletRequest.getHeader(SecurityConstants.USER_DEP_ID_HEADER);
String folderByDate = DateUtil.formatDate(new Date());
int begin = file.getOriginalFilename().lastIndexOf(".");
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, hospitalID, depID);
fileUpLoadOss(fileInfo, fileFolder + fileName, file.getInputStream(),fileFolder);
} else {
fileFolder = FilePath(fileInfo.getImgType(), folderByDate, hospitalID, depID);
fileUpLoadOss(fileInfo, fileFolder + fileName, file.getInputStream(),fileFolder);
}
}
@Override
protected boolean deleteFile(FileInfo fileInfo) {
return true;
}
/**
* 给OSS上上传文件
*
* @param fileInfo 返回对象
* @param newFilePath 上传到的文件路径
* @param fileStream 要上传的文件流
*/
@Override
public void fileUpLoadOss(FileInfo fileInfo, String newFilePath, InputStream fileStream,String fileFolder) {
String saveFilePath= CommonConstant.TEMP_IMAGE_PATH+"/"+fileFolder;
String saveFileName=CommonConstant.TEMP_IMAGE_PATH+"/"+newFilePath;
File saveFile= new File(saveFilePath);
if(!saveFile.exists()) {
saveFile.mkdirs();
}
try {
byte[] data = new byte[1024];
FileOutputStream fos = new FileOutputStream(saveFileName, false);
while ((fileStream.read(data)) != -1) {
fos.write(data);
}
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
fileInfo.setUrl(FileWebUrl +":" +ServerPort+"/" + newFilePath);
}
@Override
public OSSObject down(String url) {
return null;
}
/**
* 组合sso上的文件路径
*
* @param imgType
* @return
*/
@Override
public String FilePath(String imgType, String folderByDate, String hospitalId, String departmentId) {
//返回的文件路径
String fileFolder = OssPathEn+"/";
if (StringUtils.isNotBlank(imgType)) {
// 光片需要按照根据医院ID,科室ID,日期进行OSS存储
if (imgType.toLowerCase().equals("xray")) {
if (StringUtils.isNotBlank(hospitalId) &&
StringUtils.isNotBlank(departmentId)) {
fileFolder += "Xray/" + hospitalId + "/" + departmentId + "/" + folderByDate + "/";
} else {
fileFolder += "Xray/" + folderByDate + "/";
}
} else if (imgType.toLowerCase().equals("app")) {
//移动端APP上传
if (StringUtils.isNotBlank(hospitalId) &&
StringUtils.isNotBlank(departmentId)) {
fileFolder += "AppXray/" + hospitalId + "/" + departmentId + "/" + folderByDate + "/";
} else {
fileFolder += "AppXray/" + folderByDate + "/";
}
}
// 医院Logo只保存在一个目录中
else if (imgType.toLowerCase().equals("logo")) {
fileFolder += "HospitalLogo/";
} else if (imgType.toLowerCase().equals("doctor")) {
fileFolder += "DoctorImage/";
} else if (imgType.toLowerCase().equals("customerhospital")) {
fileFolder += "Customer/Hospital/" + folderByDate + "/";
} else if (imgType.toLowerCase().equals("customerhead")) {
fileFolder += "Customer/HeadImg/" + folderByDate + "/";
}else {
fileFolder += "OtherImage/" + folderByDate + "/";
}
} else {
fileFolder += "OtherImage/" + folderByDate + "/";
}
return fileFolder;
}
}
}