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) {

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设置Elasticsearch N-Gram字分析器的过程

说n-gram是一个大话题&#xff0c;这是轻描淡写的。 进行快速搜索&#xff0c;您会发现自己盯着语言学和语言模型&#xff0c;数据挖掘或特定蛋白质的分解对首次亮相文化的衰落所隐含的信息量。 好吧&#xff0c;我在跟那最后一个开玩笑。 但是&#xff0c;如果您是开发人员&a…

java字节码反编译_javap 反编译 java 字节码文件

概述&#xff1a;javap是 Java class文件分解器&#xff0c;可以反编译&#xff0c;也可以查看java编译器生成的字节码&#xff0c;从而对代码内部的执行逻辑进行分析。语法&#xff1a;把java文件编译为class文件&#xff1a;javac Test.java (Test.java为java文件名) 生成对…

javaone_JavaOne演讲者选择了您不容错过的10个会话

javaone确保会议安排中包含这些JavaOne会话 JavaOne 2015从这个星期日开始&#xff0c;数百个会话同时进行&#xff0c;因此很难筛选所有会话并选择要参加的会话。 这就是为什么我们邀请5位最喜欢的JavaOne发言人让我们了解他们的会议&#xff0c;并选择他们最期待的会议。 好…

java servlet文件下载_Java之Servlet文件下载20190228

jsp页面:pageEncoding"utf-8"%>Insert title here下载index.jsp下载1.jpg下载test.jspServlet:packageorg.jimmy.testwebproject2019012602.servlet.download;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjavax.se…

activiti 多租户_Activiti中具有独立数据库架构的多租户

activiti 多租户我们过去听到的一项功能请求是以多租户方式运行Activiti引擎&#xff0c;使租户的数据与其他数据隔离。 当然&#xff0c;在某些云/ SaaS环境中&#xff0c;这是必须的。 几个月前&#xff0c;波恩大学的学生拉斐尔吉伦&#xff08;Raphael Gielen&#xff09;…

jigsaw kaggle_使用Project Jigsaw的JDK 9 Early Access上的Eclipse IDE

jigsaw kaggle几周前&#xff0c;我写了关于在Java 9上运行Eclipse Neon的文章 &#xff08;尽管&#xff0c;我在帖子标题中错误地且令人尴尬地留下了“火星”&#xff09;。 值得注意的是&#xff0c;我列出的步骤也适用于带有Project Jigsaw &#xff08;Java模块化&#xf…

win7 activemq_带有骆驼,ActiveMQ,Elasticsearch的关键HL7用例

win7 activemqML7上的HL7是可以说HL7协议格式的系统的一种非常常见的传输机制。 JBoss Fuse是一个非常强大的微服务样式集成平台&#xff0c;在为关键医疗保健提供者构建灵活&#xff0c;有弹性&#xff0c;高可用性的集成方案方面拥有良好的经验。 此外&#xff0c;在JCAPS上替…

jboss4 迁移_应用程序服务器迁移:从JBoss EE5到Wildfly EE7

jboss4 迁移几周前&#xff0c;我发布了一个有关从Java EE 5迁移到7的博客 。这主要是关于如何使用新的Java EE 7改进Java EE 5代码。 现在&#xff0c;在这篇文章中&#xff0c;我将对应用程序服务器端的迁移路径进行一些研究。 如果您使用的是Java EE 5&#xff0c;则很有可…

java xmlrpc2.0 实现_简单的java xmlrpc

&#xfeff;&#xfeff;简单的 XMLRPCjava---XmlRpcClientpackage com.company;import org.apache.xmlrpc.XmlRpcClient;import org.apache.xmlrpc.XmlRpcException;import java.net.MalformedURLException;import java.util.Hashtable;import java.util.Vector;public class…

操作方法:带有Thymeleaf和Spring Boot的Java 8日期和时间

如果您碰巧使用Spring Boot和Thymeleaf&#xff0c;并且需要在视图中格式化Java 8 Date&#xff06;Time对象&#xff0c;则可以使用thymeleaf-extras-java8time –用于Java 8 Date&#xff06;Time API的Thymeleaf模块。 向现有的基于Maven或Gradle的Spring Boot项目中添加th…

java boundary_上传文件multipart form-data boundary 说明

含义 ENCTYPE"multipart/form-data" 说明&#xff1a;通过 http 协议上传文件 rfc1867协议概述&#xff0c;客户端发送内容构造。概述在最初的 http 协议中&#xff0c;没有上传文件方面的功能。 rfc1867为 http 协议添加了这个功能。客户端的浏览器&#xff0c;如 M…

java 预处理语句_预处理语句PreparedStatement到底咋用啊

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我自己试了一下直接查询id为1的语句&#xff0c;有一条结果出来&#xff0c;但是用了PreparedStatement后就没有结果了&#xff0c;有大佬知道为什么吗orzpackage test;import java.io.IOException;import java.io.PrintWriter;imp…

crud-table_我个人的CRUD故事-或我如何来到CUBA平台

crud-table在此博客文章中&#xff0c;我想介绍一下我如何使用CUBA平台以及该工具的好处。 在我年轻的“业务应用程序开发”历史上&#xff0c;我将深入探讨各个阶段&#xff0c;只是给您一些背景知识。 因此&#xff0c;让我们从如何进入典型的CRUD应用程序开始&#xff0c;以…

python api接口生成_Django 自动生成api接口文档教程

最近在写测试平台&#xff0c;需要实现一个节点服务器的api,正好在用django&#xff0c;准备使用djangorestframework插件实现。需求实现一个接口&#xff0c;在调用时&#xff0c;通过传递的参数&#xff0c;直接运行对应项目的自动化测试环境Python3.6 ,PyCharm,W7项目结构功…

eclipse clean_Clean Sheet – Windows 10的人体工程学Eclipse主题

eclipse cleanClean Sheet是适用于Windows 10的符合人体工程学的Eclipse主题。它基于干净&#xff0c;低眩光的外观和感觉&#xff0c;旨在减轻视觉疲劳和眼睛疲劳。 它融合了均衡的颜色选择&#xff0c;可以突出谐波语法并注重可读性。 除自定义滚动条外&#xff0c;它还努力满…

什么时候需要使用cqrs_在CQRS读取模型中使用Hibernate进行快速开发

什么时候需要使用cqrs在本文中&#xff0c;我将分享一些在CQRS读取模型中使用Hibernate工具进行快速开发的技巧。 为什么要Hibernate&#xff1f; Hibernate非常流行。 从外观上看&#xff0c;它也很容易&#xff0c;而从内部看&#xff0c;它却相当复杂。 它可以很容易地上手…

java面试题三_最全的java面试题目三

78、什么情况下调用doGet()和doPost()&#xff1f;答&#xff1a;Jsp页面中的form标签里的method属性为get时调用doGet()&#xff0c;为post时调用doPost()。79、servlet的生命周期答&#xff1a;web容器加载servlet&#xff0c;生命周期开始。通过调用servlet的init()方法进行…

python的内存管理机制及调优手段_Python的内存管理机制及调优手段

内存管理机制&#xff1a;引用计数、垃圾回收、内存池引用计数&#xff1a;引用计数是一种非常高效的内存管理手段&#xff0c;当一个Python对象引用时其引用计数加一&#xff0c;当其不再被一个变量引用时则减一。当引用计数等于0时对象被删除。1.引用计数&#xff1a;引用计数…

tcga癌症亚型获取_亚型多态性应用于元组的危险

tcga癌症亚型获取Java 8具有lambda和stream&#xff0c;但是没有元组&#xff0c;这真是令人遗憾 。 这就是为什么我们在jOOλ中实现了元组-Java 8的缺失部分 。 元组确实是无聊的值类型容器。 本质上&#xff0c;它们只是这些类型的枚举&#xff1a; public class Tuple2<…

java 隐藏了什么_JAVA程序中封装与隐藏是什么意思

qq_遁去的一_1隐藏就是封装吧。。。。封装是把过程和数据包围起来&#xff0c;对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念&#xff0c;即现实世界可以被描绘成一系列完全自治、封装的对象&#xff0c;这些对象通过一个受保护的接口访问其他对象。封装是一…