java发送文件_java 模拟http发送文件和参数
一、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发送文件和参数相关推荐
- java http 流_java 模拟http请求,通过流(stream)的方式,发送json数据和文件
发送端: /** * 以流的方式 * 发送文件和json对象 * * @return */ public static String doPostFileStreamAndJsonObj(String ...
- java 模拟post上传文件_Java模拟post请求上传文件
Java代码实现 /** * 模拟文件post上传 * @param urlStr(接口地址) * @param formName(接口file接收名) * @param fileName(需要上传文 ...
- java udp传输文件_JAVA使用UDP收发文件
java使用UDP发送文件 环境 maven 3.6 jdk 1.8 udp-nio 分支支持批量发送 服务端源码(接收文件) package com.banywl.file.transfer.udp ...
- java fileupload 文件_java用Commons fileupload 文件的上传
java用Commons fileupload 文件的上传 基于表单的文件上传 如果在表单中使用表单元素 />,浏览器在解析表单时,会自动生成一个输入框和一个按钮,输入框可供用户填写本地文件的文 ...
- java文件打包jar文件_Java打包成jar文件,以及将jar文件导出为exe文件方法汇总(图形说明)...
方法一:用j2ewiz,使用方法如下: 操作步骤: 1. 双击j2ewiz.exe,出现软件注册窗口,点击下一步. 2. 选择待转换的Jar文件及最低Jvm版本.我选择 ...
- doc无法编译java文件_java编译成jar文件.doc
java编译成jar文件 Java程序打包成jar包 (2012-06-08 10:28:23) 转载▼ 标签: 分类: 方法一:通过jar命令 jar命令的用法: 下面是jar命令的帮助说明: 用法 ...
- java代码实现解压文件_Java压缩/解压文件的实现代码
用java压缩/解压文件: import java.io.*; import java.awt.*; import java.awt.event.*; import java.util.*; impo ...
- java代码整合_java合并多个文件的实例代码
在实际项目中,在处理较大的文件时,常常将文件拆分为多个子文件进行处理,最后再合并这些子文件.下面就为各位介绍下Java中合并多个文件的方法. Java中合并子文件最容易想到的就是利用BufferedS ...
- java从url下载文件_Java从URL下载文件
在这篇文章中将学习如何从java下载URL中的文件.使用java.net.URL openStream()方法从java程序中的URL下载文件.也可以使用Java NIO Channels或Java ...
最新文章
- Azure CosmosDB (3) 选择适当的一致性级别
- 算法------零钱兑换(Java版本)
- 003_onreadystatechange事件
- 在Windows里备份Linux分区,在Windows里分出Linux分区(Linux分区).pdf
- Python有自动完成功能的IDE 么?
- Android面试题详细整理系列(二)
- LeetCode刷题知识总结
- SAP 电商云 Spartacus UI 回归测试 checkout-flow.core-e2e-spec.ts
- 一次服务器磁盘空间不足导致的一系列问题
- android 倒计时封装,react native中的聊天气泡及timer封装成的发送验证码倒计时
- 搜狗浏览器怎么保存账号密码 搜狗浏览器保存账号密码教程
- ucenter php7.0版,UCenter1.5.0/UCenter Home1.5/Discuz! 7.0
- 使用Aop管理所有Valid结构bindingResult
- Django Form ModelForm modelfromset
- zynq开发系列5:通过AXI GPIO的中断实现PL端按键控制PS端LED(SDK开发详解)
- 协同过滤算法的几篇文章PFM/svd/ svd++
- HFSS脚本建模入门
- C/C++的刷题练习之牛客网,一个友好的网站
- 华为路由器配置静态路由和下一跳,使PC互通
- 【题解】【AcWing】149. 荷马史诗
热门文章
- 成为Java流大师–第5部分:将联接的数据库表转换为流
- java命令行参数工具_Java方法中的参数太多,第8部分:工具
- lucene使用3.0.3_使用Apache Lucene 4.3轻松进行搜索
- Spring @Lazy批注用例
- nosql非关系型数据库_从Datomic出发,革命性的非NoSQL数据库
- MQTT和Java入门
- apache shiro_Apache Shiro第1部分–基础
- 性能,可伸缩性和活力
- 使用Spring Boot和Spring MVC自定义HttpMessageConverters
- 在N + 1场景中使用@NamedEntityGraph更有选择地加载JPA实体