一、maven:

org.apache.httpcomponents

httpmime

4.5.3

二、工具类:

import java.io.File;

import java.util.Map;

import java.util.Map.Entry;

import org.apache.http.*;

import org.apache.http.client.HttpClient;

import org.apache.http.client.config.RequestConfig;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.conn.HttpConnectionFactory;

import org.apache.http.conn.ManagedHttpClientConnection;

import org.apache.http.conn.routing.HttpRoute;

import org.apache.http.entity.ContentType;

import org.apache.http.entity.mime.HttpMultipartMode;

import org.apache.http.entity.mime.MultipartEntityBuilder;

import org.apache.http.entity.mime.content.FileBody;

import org.apache.http.impl.DefaultHttpResponseFactory;

import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;

import org.apache.http.impl.client.HttpClientBuilder;

import org.apache.http.impl.client.LaxRedirectStrategy;

import org.apache.http.impl.conn.DefaultHttpResponseParserFactory;

import org.apache.http.impl.conn.ManagedHttpClientConnectionFactory;

import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;

import org.apache.http.impl.io.DefaultHttpRequestWriterFactory;

import org.apache.http.message.BasicHeader;

import org.apache.http.message.BasicLineParser;

import org.apache.http.protocol.HTTP;

import org.apache.http.util.CharArrayBuffer;

import org.apache.http.util.EntityUtils;

import lombok.extern.slf4j.Slf4j;

/**

* @Auther: zyx.

* @Date: 2018/11/19 20:03

*/

@Slf4j

public class HttpUtils {

public static final String DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/" +

"537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36";

public static String httpPostForFile(String url, Map fileMap, Map params,

Map headers) {

HttpClient httpClient = buildHttpClient();

try {

HttpPost httpPost = new HttpPost(url);

httpPost.setHeaders(buildHeader(headers));

MultipartEntityBuilder builder = MultipartEntityBuilder.create();

builder.setCharset(java.nio.charset.Charset.forName("UTF-8"));

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

if (fileMap != null && fileMap.size() > 0) {

for (Entry file : fileMap.entrySet()) {

FileBody fileBody = new FileBody((File) file.getValue(), ContentType.DEFAULT_BINARY);

builder = MultipartEntityBuilder.create();

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

builder.addPart(file.getKey(), fileBody);

}

}

ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);

for (Map.Entry entry : params.entrySet()) {

if (entry.getValue() == null)

continue;

builder.addTextBody(entry.getKey(), entry.getValue().toString(), contentType);

}

HttpEntity entity = builder.build();

httpPost.setEntity(entity);

HttpResponse response = httpClient.execute(httpPost);

String result = "";

Integer statusCode = response.getStatusLine().getStatusCode();

if (StrUtils.isNotEmpty(statusCode) && statusCode.intValue() == HttpStatus.SC_OK) {

result = EntityUtils.toString(response.getEntity(), "utf-8");

} else {

log.error("请求地址" + url + "错误状态" + response.getStatusLine().getStatusCode());

EntityUtils.consume(entity);

}

return result;

} catch (Exception e) {

log.error(e.getMessage());

}

return "";

}

public static HttpClient buildHttpClient() {

HttpConnectionFactory httpConnectionFactory = new ManagedHttpClientConnectionFactory(

new DefaultHttpRequestWriterFactory(),

new DefaultHttpResponseParserFactory(new MyLineParser(),

new DefaultHttpResponseFactory()));

PoolingHttpClientConnectionManager pccm = new PoolingHttpClientConnectionManager(

httpConnectionFactory);

pccm.setDefaultMaxPerRoute(50);

pccm.setMaxTotal(300);

HttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(RequestConfig.custom()

.setConnectionRequestTimeout(15000)

.setSocketTimeout(60000)

.setConnectTimeout(40000).build())

.setRedirectStrategy(new LaxRedirectStrategy())

.setConnectionManager(pccm)

.setRetryHandler(new DefaultHttpRequestRetryHandler(1, true))

.setUserAgent(DEFAULT_USER_AGENT).build();

return httpClient;

}

public static Header[] buildHeader(Map params) {

Header[] headers = null;

if (params != null && params.size() > 0) {

headers = new BasicHeader[params.size()];

int i = 0;

for (Map.Entry entry : params.entrySet()) {

headers[i] = new BasicHeader(entry.getKey(), entry.getValue());

i++;

}

}

return headers;

}

/**

* 如果返回不规范的HTTP头,实现兼容.

*/

private static class MyLineParser extends BasicLineParser {

@Override

public Header parseHeader(

CharArrayBuffer buffer) throws ParseException {

try {

return super.parseHeader(buffer);

} catch (ParseException ex) {

return new BasicHeader("Invalid",buffer.toString());

}

}

}

}

三、发送端参数包装:

public static List> builderSendFile(SyncLibrary sync, File file, int index, int splitNum) {

List> list = new ArrayList<>();

Map textMap = new HashMap<>();

textMap.put("methodType", sync.getMethodType());

textMap.put("splitNum", splitNum);

textMap.put("index", index);

textMap.put("libId", sync.getLibId());

textMap.put("appkey", sync.getAppkey());

Map fileMap = new HashMap<>();

fileMap.put("fileData", file);

list.add(textMap);

list.add(fileMap);

return list;

}

四、Spring controller接收:

@ResponseBody

@RequestMapping(value = "/feature/file/receive")

public ReceiveResponse receiveDate(@RequestParam(value = "fileData", required = false) MultipartFile multipartFile,

SyncSendDto dto) {

java发送文件_java 模拟http发送文件和参数相关推荐

  1. java http 流_java 模拟http请求,通过流(stream)的方式,发送json数据和文件

    发送端: /** * 以流的方式 * 发送文件和json对象 * * @return */ public static String doPostFileStreamAndJsonObj(String ...

  2. java 模拟post上传文件_Java模拟post请求上传文件

    Java代码实现 /** * 模拟文件post上传 * @param urlStr(接口地址) * @param formName(接口file接收名) * @param fileName(需要上传文 ...

  3. java udp传输文件_JAVA使用UDP收发文件

    java使用UDP发送文件 环境 maven 3.6 jdk 1.8 udp-nio 分支支持批量发送 服务端源码(接收文件) package com.banywl.file.transfer.udp ...

  4. java fileupload 文件_java用Commons fileupload 文件的上传

    java用Commons fileupload 文件的上传 基于表单的文件上传 如果在表单中使用表单元素 />,浏览器在解析表单时,会自动生成一个输入框和一个按钮,输入框可供用户填写本地文件的文 ...

  5. java文件打包jar文件_Java打包成jar文件,以及将jar文件导出为exe文件方法汇总(图形说明)...

    方法一:用j2ewiz,使用方法如下: 操作步骤: 1.         双击j2ewiz.exe,出现软件注册窗口,点击下一步. 2.         选择待转换的Jar文件及最低Jvm版本.我选择 ...

  6. doc无法编译java文件_java编译成jar文件.doc

    java编译成jar文件 Java程序打包成jar包 (2012-06-08 10:28:23) 转载▼ 标签: 分类: 方法一:通过jar命令 jar命令的用法: 下面是jar命令的帮助说明: 用法 ...

  7. java代码实现解压文件_Java压缩/解压文件的实现代码

    用java压缩/解压文件: import java.io.*; import java.awt.*; import java.awt.event.*; import java.util.*; impo ...

  8. java代码整合_java合并多个文件的实例代码

    在实际项目中,在处理较大的文件时,常常将文件拆分为多个子文件进行处理,最后再合并这些子文件.下面就为各位介绍下Java中合并多个文件的方法. Java中合并子文件最容易想到的就是利用BufferedS ...

  9. java从url下载文件_Java从URL下载文件

    在这篇文章中将学习如何从java下载URL中的文件.使用java.net.URL openStream()方法从java程序中的URL下载文件.也可以使用Java NIO Channels或Java ...

最新文章

  1. Azure CosmosDB (3) 选择适当的一致性级别
  2. 算法------零钱兑换(Java版本)
  3. 003_onreadystatechange事件
  4. 在Windows里备份Linux分区,在Windows里分出Linux分区(Linux分区).pdf
  5. Python有自动完成功能的IDE 么?
  6. Android面试题详细整理系列(二)
  7. LeetCode刷题知识总结
  8. SAP 电商云 Spartacus UI 回归测试 checkout-flow.core-e2e-spec.ts
  9. 一次服务器磁盘空间不足导致的一系列问题
  10. android 倒计时封装,react native中的聊天气泡及timer封装成的发送验证码倒计时
  11. 搜狗浏览器怎么保存账号密码 搜狗浏览器保存账号密码教程
  12. ucenter php7.0版,UCenter1.5.0/UCenter Home1.5/Discuz! 7.0
  13. 使用Aop管理所有Valid结构bindingResult
  14. Django Form ModelForm modelfromset
  15. zynq开发系列5:通过AXI GPIO的中断实现PL端按键控制PS端LED(SDK开发详解)
  16. 协同过滤算法的几篇文章PFM/svd/ svd++
  17. HFSS脚本建模入门
  18. C/C++的刷题练习之牛客网,一个友好的网站
  19. 华为路由器配置静态路由和下一跳,使PC互通
  20. 【题解】【AcWing】149. 荷马史诗

热门文章

  1. 成为Java流大师–第5部分:将联接的数据库表转换为流
  2. java命令行参数工具_Java方法中的参数太多,第8部分:工具
  3. lucene使用3.0.3_使用Apache Lucene 4.3轻松进行搜索
  4. Spring @Lazy批注用例
  5. nosql非关系型数据库_从Datomic出发,革命性的非NoSQL数据库
  6. MQTT和Java入门
  7. apache shiro_Apache Shiro第1部分–基础
  8. 性能,可伸缩性和活力
  9. 使用Spring Boot和Spring MVC自定义HttpMessageConverters
  10. 在N + 1场景中使用@NamedEntityGraph更有选择地加载JPA实体