HttpFileService.java 5.61 KB
Newer Older
eddie.woo's avatar
eddie.woo committed
1 2 3
package pwc.taxtech.atms.service.impl;

import com.alibaba.fastjson.JSON;
eddie.woo's avatar
eddie.woo committed
4
import com.alibaba.fastjson.JSONObject;
eddie.woo's avatar
eddie.woo committed
5 6 7
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
eddie.woo's avatar
eddie.woo committed
8
import org.apache.http.HttpHeaders;
eddie.woo's avatar
eddie.woo committed
9 10 11 12
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
eddie.woo's avatar
eddie.woo committed
13 14
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
eddie.woo's avatar
eddie.woo committed
15 16 17 18
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
eddie.woo's avatar
eddie.woo committed
19
import org.springframework.web.multipart.MultipartFile;
eddie.woo's avatar
eddie.woo committed
20
import pwc.taxtech.atms.common.config.FileServiceConfig;
ZeGang Z Si's avatar
ZeGang Z Si committed
21
import pwc.taxtech.atms.common.util.DateUtils;
eddie.woo's avatar
eddie.woo committed
22
import pwc.taxtech.atms.dto.ApiResultDto;
ZeGang Z Si's avatar
ZeGang Z Si committed
23
import pwc.taxtech.atms.dto.FileDto;
eddie.woo's avatar
eddie.woo committed
24 25 26 27 28
import pwc.taxtech.atms.exception.ServiceException;

import java.io.IOException;
import java.io.InputStream;

ZeGang Z Si's avatar
ZeGang Z Si committed
29 30 31 32
/**
  * version 2.0
 * author kevin
 */
eddie.woo's avatar
eddie.woo committed
33 34 35 36 37
@Service
public class HttpFileService extends BaseService {
    @Autowired
    private FileServiceConfig config;
    private static final String USER_TEMPLATE_PATH = "pwc/userTemplate/";
eddie.woo's avatar
eddie.woo committed
38
    private static final String HTTP_HEADER = "application/json;charset=UTF-8";
eddie.woo's avatar
eddie.woo committed
39 40 41 42

    /**
     * 上传模板
     *
eddie.woo's avatar
eddie.woo committed
43 44
     * @param fileName 文件名
     * @param file     MultipartFile
ZeGang Z Si's avatar
ZeGang Z Si committed
45
     * @param  fullPath 是否返回全路径 默认false ,如果为true返回的路径直接可以用于下载
eddie.woo's avatar
eddie.woo committed
46 47
     * @return Boolean
     */
ZeGang Z Si's avatar
ZeGang Z Si committed
48
    public String uploadTemplate(String fileName, MultipartFile file, boolean fullPath) throws ServiceException {
eddie.woo's avatar
eddie.woo committed
49
        if (StringUtils.isBlank(fileName) || null == file) {
eddie.woo's avatar
eddie.woo committed
50 51 52
            throw new IllegalArgumentException("上传参数为空");
        }
        CloseableHttpClient httpClient = null;
ZeGang Z Si's avatar
ZeGang Z Si committed
53
        String filePath = USER_TEMPLATE_PATH + fileName;
eddie.woo's avatar
eddie.woo committed
54
        try {
ZeGang Z Si's avatar
ZeGang Z Si committed
55
            String serverPath = config.getServerUrl() + config.getUploadUrl();
eddie.woo's avatar
eddie.woo committed
56
            httpClient = HttpClients.createDefault();
ZeGang Z Si's avatar
ZeGang Z Si committed
57
            HttpPost httpPost = new HttpPost(serverPath);
eddie.woo's avatar
eddie.woo committed
58
            httpPost.addHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.getMimeType());
eddie.woo's avatar
eddie.woo committed
59

eddie.woo's avatar
eddie.woo committed
60
            JSONObject param = new JSONObject();
ZeGang Z Si's avatar
ZeGang Z Si committed
61
            param.put("path", filePath);
eddie.woo's avatar
eddie.woo committed
62 63 64
            param.put("file", file.getBytes());

            HttpEntity httpEntity = new StringEntity(param.toJSONString(), ContentType.APPLICATION_JSON);
eddie.woo's avatar
eddie.woo committed
65 66 67 68 69
            httpPost.setEntity(httpEntity);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            ApiResultDto resultDto = JSON.parseObject(IOUtils.toString(httpResponse.getEntity().getContent(), "UTF-8"), ApiResultDto.class);
            if (resultDto.getCode() == ApiResultDto.SUCCESS) {
ZeGang Z Si's avatar
ZeGang Z Si committed
70 71 72 73
                if(fullPath){
                    return config.getServerUrl() + "/" + filePath;
                }
                return filePath;
eddie.woo's avatar
eddie.woo committed
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
            }
        } catch (Exception e) {
            logger.error("uploadTemplate error.", e);
        } finally {
            if (null != httpClient) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    logger.error("close httpClient error.", e);
                }
            }
        }
        throw new ServiceException("uploadTemplate error.");
    }

ZeGang Z Si's avatar
ZeGang Z Si committed
89 90 91 92 93

    public String uploadTemplate(String fileName, MultipartFile file) throws ServiceException{
        return  uploadTemplate(fileName, file, false);
    }

eddie.woo's avatar
eddie.woo committed
94 95 96 97 98 99 100 101 102 103 104 105
    /**
     * 下载模板
     *
     * @param filePath 模板路径
     * @return InputStream
     */
    public InputStream getUserTemplate(String filePath) {
        if (StringUtils.isBlank(filePath)) {
            return null;
        }
        if (StringUtils.isNotBlank(config.getServerUrl())) {
            CloseableHttpClient client = HttpClients.createDefault();
106 107 108 109 110 111 112 113
            //先判断下是否是全域名 全域名代表是didi服务器url
            String url;
            if(filePath.indexOf("http")>=0){
                url = filePath;
            }else{
                url = StringUtils.appendIfMissing(config.getServerUrl(), "/") + filePath;
            }
            HttpGet httpGet = new HttpGet(url);
eddie.woo's avatar
eddie.woo committed
114 115 116 117
            CloseableHttpResponse response = null;
            try {
                response = client.execute(httpGet);
                if (response.getStatusLine().getStatusCode() == 200) {
eddie.woo's avatar
eddie.woo committed
118
                    return IOUtils.toBufferedInputStream(response.getEntity().getContent());
eddie.woo's avatar
eddie.woo committed
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
                }
            } catch (Exception e) {
                logger.error("getUserTemplate error.", e);
            } finally {
                if (null != client) {
                    try {
                        client.close();
                    } catch (IOException e) {
                        logger.error("close httpClient error.", e);
                    }
                }
            }
        }
        return null;
    }

ZeGang Z Si's avatar
ZeGang Z Si committed
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152


    //上传
    public FileDto upload(MultipartFile file, String remarks){
        FileDto fileDto = new FileDto();
        int i = file.getOriginalFilename().lastIndexOf(".");
        fileDto.setFileName(file.getOriginalFilename());
        if(remarks != null){
            fileDto.setRemarks(remarks);
        }

        fileDto.setFileUrl(uploadTemplate(file.getOriginalFilename(), file, true));
        //绑定
        fileDto.setSize(String.valueOf(file.getSize()/1024));
        fileDto.setUploadUser(authUserHelper.getCurrentAuditor().get());
        fileDto.setCreateTime(DateUtils.getNowDate());
        return fileDto;
    }
eddie.woo's avatar
eddie.woo committed
153
}