package com.jeeplus.modules.sys.web; import org.apache.http.Consts; 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.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.Map; /** * @author wang_xy * @description * @Version 1.0 * @params * @return * @since 2022/9/15 10:22 */ public class HttpResponse { public static String doPostFile2(String url, Map param, File file) { // 创建Httpclient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); String resultString = ""; CloseableHttpResponse response = null; HttpPost httppost = new HttpPost(url); try { // HttpMultipartMode.RFC6532参数的设定是为避免文件名为中文时乱码 MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532); // 设置请求的编码格式 builder.setCharset(Consts.UTF_8); builder.setContentType(ContentType.MULTIPART_FORM_DATA); // 添加文件,也可以添加字节流 builder.addBinaryBody("file", file); //或者使用字节流也行,根据具体需要使用 // builder.addBinaryBody("file", Files.readAllBytes(file.toPath()),ContentType.APPLICATION_OCTET_STREAM,file.getName()); // 或者builder.addPart("file",new FileBody(file)); // 添加参数 if (param != null) { for (String key : param.keySet()) { builder.addTextBody(key, param.get(key)); } } HttpEntity reqEntity = builder.build(); httppost.setEntity(reqEntity); // 设置超时时间 httppost.setConfig(getConfig()); response = httpClient.execute(httppost); resultString = EntityUtils.toString(response.getEntity(), "GBK"); } catch (Exception e) { e.printStackTrace(); } finally { try { response.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return resultString; } private static RequestConfig getConfig() { return RequestConfig.custom().setConnectionRequestTimeout(60000).setSocketTimeout(120000) .setConnectTimeout(60000).build(); } }