HttpClientUtil对接上传下载文件接口

@Slf4j
public class HttpClientUtil {
private static PoolingHttpClientConnectionManager cm;
private static String EMPTY_STR = “”;
private static String UTF_8 = “UTF-8”;

private static void init() {
    if (cm == null) {
        cm = new PoolingHttpClientConnectionManager();
        cm.setMaxTotal(50);// 整个连接池最大连接数
        cm.setDefaultMaxPerRoute(5);// 每路由最大连接数,默认值是2
    }
}

/**
 * 通过连接池获取HttpClient
 *
 * @return
 */
private static CloseableHttpClient getHttpClient() {
    init();
    return HttpClients.custom().setConnectionManager(cm).build();
}


/**
 * 中转文件 上传本地文件到oss
 * @param remoteUrl 第三方接口地址
 * @param fileUrl 上传的文件本地地址
 * @return 响应结果
 */
@SuppressWarnings("Duplicates")
public static String uploadFile(String remoteUrl, String fileUrl) {
    CloseableHttpClient httpClient = HttpClients.createDefault();
    String result = null;
    HttpPost httpPost = null;
    try {
        File file = new File(fileUrl);
        InputStream is = new FileInputStream(file);
        String fileName = file.getName();
        httpPost = new HttpPost(remoteUrl);
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.addBinaryBody("file", is, ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
        builder.setCharset(Charset.forName("utf-8"));
        HttpEntity entity = builder.build();
        httpPost.setEntity(entity);
        HttpResponse response = httpClient.execute(httpPost);// 执行提交
        HttpEntity responseEntity = response.getEntity();
        if (responseEntity != null) {
            // 将响应内容转换为字符串
            result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
            System.out.println(result);
            JSONObject jsonObject = JSON.parseObject(result);
            String success = jsonObject.get("success").toString();
            if ("true".equals(success)){
                //这里的值根据返回值动态获取
                result = jsonObject.get("serverFileID").toString();
            }
        }
    } catch (IOException e) {
        log.error(e.getMessage(),e);
    } catch (Exception e) {
        log.error(e.getMessage(),e);
    } finally {
        if (httpPost != null){
            httpPost.releaseConnection();
        }
        try {
            httpClient.close();
        } catch (IOException e) {
            log.error(e.getMessage(),e);
        }
    }
    return result;
}

/**
 * 中转文件
 * @param remoteUrl 第三方接口地址
 * @param file 上传的文件
 * @return 响应结果
 */
@SuppressWarnings("Duplicates")
public static String uploadFile(String remoteUrl, MultipartFile file) {
    CloseableHttpClient httpClient = HttpClients.createDefault();
    String result = null;
    HttpPost httpPost = null;
    try {
        String fileName = file.getOriginalFilename();
        httpPost = new HttpPost(remoteUrl);
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
        builder.setCharset(Charset.forName("utf-8"));
        HttpEntity entity = builder.build();
        httpPost.setEntity(entity);
        HttpResponse response = httpClient.execute(httpPost);// 执行提交
        HttpEntity responseEntity = response.getEntity();
        if (responseEntity != null) {
            // 将响应内容转换为字符串
            result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
            System.out.println(result);
            JSONObject jsonObject = JSON.parseObject(result);
            String success = jsonObject.get("success").toString();
            if ("true".equals(success)){
                //这里的返回值根据返回值动态获取
                result = jsonObject.get("serverFileID").toString();
            }
        }
    } catch (IOException e) {
        log.error(e.getMessage(),e);
    } catch (Exception e) {
        log.error(e.getMessage(),e);
    } finally {
        if (httpPost != null){
            httpPost.releaseConnection();
        }
        try {
            httpClient.close();
        } catch (IOException e) {
            log.error(e.getMessage(),e);
        }
    }
    return result;
}

/**
 * 下载文件到本地
 * @param url 第三方接口地址
 * @param fileId 文件key
 * @param fileUrlName 下载到本地的路径+文件名
 */
public static void download(String url,String fileId,String fileUrlName){
    InputStream is = null;
    HttpGet httpGet = null;
    FileOutputStream downloadFile = null;
    try {
        OssFileBean ossFileBean= getOssFileBean(url, fileId);
            httpGet = ossFileBean.getHttpGet();
            is = ossFileBean.getInputStream();
        int index;
        byte[] bytes = new byte[1024];
        downloadFile = new FileOutputStream(fileUrlName);
        while ((index = is.read(bytes)) != -1) {
            downloadFile.write(bytes, 0, index);
            downloadFile.flush();
        }
    } catch (Exception e) {
        log.error(e.getMessage(),e);
    } finally {
        if (downloadFile != null){
            try {
                downloadFile.close();
            } catch (IOException e) {
            }
        }
        if (is != null){
            try {
                is.close();
            } catch (IOException e) {
            }
        }
        if (httpGet != null){
            try {
                httpGet.releaseConnection();
            } catch (Exception e) {
            }
        }
    }
}

/**
 * 获取文件流对象及连接对象
 * @param url
 * @param fileId
 * @return OssFileBean
 */
public static OssFileBean getOssFileBean(String url, String fileId) {
    OssFileBean ossFileBean = new OssFileBean();
    url += fileId;
    // 请求结果
    // 创建client
    CloseableHttpClient client = HttpClients.createDefault();
    // 创建HttpGet
    HttpGet httpGet = new HttpGet();
    try {
        // 创建uri
        URIBuilder builder = new URIBuilder(url);
        URI uri = builder.build();
        // 设置请求地址
        httpGet.setURI(uri);
        // 发送请求,返回响应对象
        CloseableHttpResponse response = client.execute(httpGet);
        // 获取响应状态
        int status = response.getStatusLine().getStatusCode();
        if (status == HttpStatus.SC_OK) {
            // 获取响应数据
            HttpEntity entity = response.getEntity();
            InputStream in = entity.getContent();
            Header[] allHeaders = response.getAllHeaders();
            for (Header allHeader : allHeaders) {
                if ("Content-Disposition".equalsIgnoreCase(allHeader.getName())) {
                    String value = allHeader.getValue();
                    if (value.contains("downloadFile.")){
                        value = value.substring(value.indexOf("downloadFile.")+"downloadFile.".length(),value.length()-1);
                    }else if (value.contains("filename=")){
                        value = value.substring(value.indexOf("filename=")+"filename=".length(),value.length()-1);
                    }
                    ossFileBean.setFileName(value);
                }
            }
            ossFileBean.setHttpGet(httpGet);
            ossFileBean.setInputStream(in);
        }else {
            return null;
        }
    }catch (IOException e) {
        log.error(e.getMessage(),e);
    } catch (Exception e) {
        log.error(e.getMessage(),e);
    }
    return ossFileBean;
}

@Data
public static class OssFileBean {
    //文件流
    private InputStream inputStream;
    //返回连接 记得要关闭
    private HttpGet httpGet;
    //文件名
    private String fileName;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值