引入maven依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.6</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.3.6</version>
</dependency>
demo:
public String postForUpload(String url, Map<String, String> headers, Map<String, Object> files, String fileName,
Map<String, String> params) {
CloseableHttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
if(!CollectionUtils.isEmpty(headers)) {
for (Map.Entry<String, String> entity : headers.entrySet()) {
post.setHeader(entity.getKey(), entity.getValue());
}
}
try {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.setCharset(StandardCharsets.UTF_8);
if(!CollectionUtils.isEmpty(files)) {
//上传的文件体
for (String key : files.keySet()) {
if(files.get(key) instanceof File) {
builder.addBinaryBody(key, (File) files.get(key));
}
if(files.get(key) instanceof InputStream) {
builder.addBinaryBody(key, (InputStream) files.get(key), ContentType.MULTIPART_FORM_DATA, fileName);
}
if(files.get(key) instanceof byte[]) {
builder.addBinaryBody(key, (byte[]) files.get(key), ContentType.MULTIPART_FORM_DATA, fileName);
}
}
}
if(!CollectionUtils.isEmpty(params)) {
for (Map.Entry<String, String> entity : params.entrySet()) {
if(StringUtils.isNotBlank(entity.getValue())) {
builder.addTextBody(entity.getKey(), entity.getValue());
}
}
}
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);
// 设置连接超时时间
int timeout = 5000;
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeout)
.setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).build();
post.setConfig(requestConfig);
entity = response.getEntity();
if(null != entity) {
return EntityUtils.toString(entity, Charset.forName(DEFAULT_CHARSET));
}
}catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}