forked from kidgrow-microservices-platform

zhaoxiaohao
2021-03-02 8b7c75249a83b45dd53cc2177bb61bfa3d7e55cb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
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.beans.factory.annotation.Value;
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<br>
 *
 * @Description: 阿里云配置<br>
 * @Project: <br>
 * @CreateDate: Created in 2020/2/18 11:24 <br>
 * @Author: <a href="4345453@kidgrow.com">liuke</a>
 */
@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();
        }
 
        @Value("${spring.profiles.active}")
        private String OssPathEn;
 
        @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) {
 
            ossClient.deleteObject(fileProperties.getOss().getBucketName(), fileInfo.getName());
            return true;
        }
 
        /**
         * 给OSS上上传文件
         *
         * @param fileInfo    返回对象
         * @param newFilePath 上传到的文件路径
         * @param fileStream  要上传的文件流
         */
        @Override
        public void fileUpLoadOss(FileInfo fileInfo, String newFilePath, InputStream fileStream,String fileFolder) {
            ossClient.putObject(fileProperties.getOss().getBucketName(), newFilePath, fileStream);
            fileInfo.setUrl(fileProperties.getOss().getDomain() + newFilePath);
 
        }
        @Override
        public OSSObject down(String url) {
            GetObjectRequest request = new GetObjectRequest(fileProperties.getOss().getBucketName(), url);
            return ossClient.getObject(request);
        }
 
        /**
         * 组合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;
        }
    }
}