package com.bushangbuxia.imagehosting.service; import java.io.File; import java.io.IOException; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicHeader; import org.apache.http.util.EntityUtils; import com.bushangbuxia.imagehosting.domain.ImageHostingReqConfig; /** * @author kalman03 * @since 2019-08-17 */ public abstract class AbstractInnerImageUploadService implements InnerImageUploadService { abstract String getUploadUrl(); abstract HttpEntity getHttpEntity(File imageFile); abstract String anaysisResult(String response); abstract Map<String, String> getHeaderMap(); public String upload(File imageFile,ImageHostingReqConfig reqConfig) throws IOException { String result = null; CloseableHttpClient httpclient = HttpClients.createDefault(); String url = getUploadUrl(); HttpPost httpPost = new HttpPost(url); RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(reqConfig.getConnetionTimeOut()) .setSocketTimeout(reqConfig.getSocketTimeout()).build(); httpPost.setConfig(requestConfig); httpPost.setEntity(getHttpEntity(imageFile)); Map<String, String> headerMap = getHeaderMap(); if(headerMap != null && !headerMap.isEmpty()) { for(Map.Entry<String, String> entry : headerMap.entrySet()) { httpPost.addHeader(new BasicHeader(entry.getKey(), entry.getValue())); } } CloseableHttpResponse response = httpclient.execute(httpPost); try { HttpEntity resEntity = response.getEntity(); if (resEntity != null) { String responseEntity = EntityUtils.toString(response.getEntity()); result = anaysisResult(responseEntity); if(result == null || result.isEmpty()) { printError(url, responseEntity); } } // EntityUtils.consume(resEntity); return result; } finally { try { response.close(); } catch (Exception e) { } } } private void printError(String url,String responseEntity) { System.out.println("上传图片失败,返回结果------>:\n==============="+responseEntity+"===============\n请求站点:"+url); } }