java使用httpcomponents 上传文件
一、httpcomponents简介
httpcomponents 是apache下的用来负责创建和维护一个工具集的低水平Java组件集中在HTTP和相关协议的工程。我们可以用它在代码中直接发送http请求,而无需用到页面的js去完成。该项目由一下几个部分组成:
1、HttpComponents Core:
HttpCore 是一套的低级别的 HTTP 传输组件可用于构建自定义客户端和服务器端 HTTP 服务与一个最小的足迹。HttpCore 支持两种模型: 阻止基于经典 Java I/O 和非阻塞 I/O 模型,事件驱动的 I/O 模型基于 Java NIO。阻塞 I/O 模型可能更适合于数据密集型、 低延迟的情况,而非阻塞模型可能更适合高延迟场景尤其是原始数据吞吐量不 有效地同时处理 成千上万的HTTP连接.而非阻塞模型可能更适合于高延迟情况下 有效地同时处理成千上万的并发HTTP连接的能力比处理原始数据吞吐量更重要的时候。
2、HttpComponents Cilent
HttpClient是一个HTTP/1.1并且兼容HTTP代理的一个实现,基于HttpCore。它为客户端验证,HTTP状态管理,HTTP连接管理,提供哦你一个可重复使用的组件。 HttpComponents Client是Commons HttpClient 3.x的一个替代者和继承者。
3、HttpComponents AsyncCore
HttpClient是一个HTTP/1.1并且兼容HTTP代理的一个实现,基于HttpCore NIO和HttpClient components。它是Apache HttpClient的一个辅助模块,在处理大量的并发连接的能力比原始数据吞吐量性能更重要的特殊情况下用到。
二、HttpClient post上传文件
当我们上传一个文件的时候,一般都会有个key值对应这个文件。后台可以通过rquest,通过这个key值获取这个key对于的文件。传递参数也是一样。这里我们用到httpcomponents中的HttpClient组件,下载地址为:http://hc.apache.org/downloads.cgi . 使用到的jar包如下:
三、示例代码
- package com.demo.test;
- import java.io.File;
- import java.io.IOException;
- import org.apache.http.HttpEntity;
- import org.apache.http.client.ClientProtocolException;
- import org.apache.http.client.methods.CloseableHttpResponse;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.entity.mime.MultipartEntityBuilder;
- import org.apache.http.entity.mime.content.FileBody;
- import org.apache.http.impl.client.CloseableHttpClient;
- import org.apache.http.impl.client.HttpClients;
- import org.apache.http.util.EntityUtils;
- public class Test {
- public static String uploadFile(String uploadurl, File file) {
- CloseableHttpClient client = HttpClients.createDefault();
- HttpPost post = new HttpPost(uploadurl);
- FileBody bin = new FileBody(file);// 文件
- HttpEntity reqEntity = MultipartEntityBuilder.create()
- .addPart("media", bin).build();// 请求体. media为文件对于的key值
- post.setEntity(reqEntity);
- String responseContent = null; // 响应内容
- CloseableHttpResponse response = null;
- try {
- response = client.execute(post);
- if (response.getStatusLine().getStatusCode() == 200) {
- HttpEntity entity = response.getEntity();
- responseContent = EntityUtils.toString(entity, "UTF-8");
- }
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (response != null)
- response.close();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (client != null)
- client.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return responseContent;
- }
- public static void main(String[] args) {
- String result = uploadFile("http://www.xxx.com/file/upload.action", new File(
- "c:/test.txt"));
- System.out.println(result);
- }
- }
后台打印信息,会显示文件上传的结果。
java使用httpcomponents 上传文件的更多相关文章
- 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- 《手把手教你》系列技巧篇(五十五)-java+ selenium自动化测试-上传文件-下篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- Java使用HttpClient上传文件
Java可以使用HttpClient发送Http请求.上传文件等,非常的方便 Maven <dependency> <groupId>org.apache.httpcompon ...
- java使用ftp上传文件
ftpServer是apache MINA项目的一个子项目,它实现了一个ftp服务器,与vsftpd是同类产品.Filezilla是一个可视化的ftp服务器. ftp客户端也有很多,如Filezill ...
- Java Servlet 接收上传文件
在Java中使用 Servlet 来接收用户上传的文件,需要用到两个apache包,分别是 commons-fileupload 和 commons-io 包: 如果直接在doPost中,使用requ ...
- Java使用HttpURLConnection上传文件
从普通Web页面上传文件非常easy.仅仅须要在form标签叫上enctype="multipart/form-data"就可以,剩余工作便都交给浏览器去完毕数据收集并发送Http ...
- Java模拟http上传文件请求(HttpURLConnection,HttpClient4.4,RestTemplate)
先上代码: public void uploadToUrl(String fileId, String fileSetId, String formUrl) throws Throwable { St ...
- JAVA调用FTP上传文件
import java.io.File; import java.io.FileInputStream; import org.apache.commons.net.ftp.FTP; import o ...
- java 网页 保存上传文件
网页请求提交到另外一个jsp 进行处理 index.jsp <%@ page language="java" import="java.util.*" p ...
随机推荐
- IOS开发UI基础UIControl事件
UIControl事件1.UIControlEventTouchDown单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候. 2.UIControlEventTouchDownRepeat多点触 ...
- JS 对象属性相关--检查属性、枚举属性等
1.删除属性 delete运算符可以删除对象的属性 delete person.age //即person不再有属性age delete person['age'] //或者这样 delete只是断开 ...
- 2015年百度之星初赛(1) --- D KPI
KPI Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- 使用VS GDB扩充套件在VS上远端侦错Linux上的C/C++程序
在 Linux 上开发 C/C++ 程序,或许你会直接(本机或远端)登入 Linux,打开编辑器写完代码后,就用 gcc/g++ 来编译,遇到要除错(debug)的时候,则会选择使用 gdb 来进行除 ...
- C#实现判断字符是否为中文
C#实现判断字符是否为中文 (2012-08-14 14:25:28) 标签: gb2312 big5编码 gbk编码 判断 汉字 杂谈 分类: 技术 protected bool IsChinese ...
- c++中stl容器的常用示例
1. set(集合)——包含了经过排序了的数据,这些数据的值(value)必须是唯一的. 也就是说输入set容器后得到数据,会去重并排序. s.insert()插入一个元素 s.begin ...
- ASP.NET WebAPI 10 Action的选择(二)
在本系列的第二篇简要的讲述了Action的选择条件本篇深入讲述一下Action选择的过程在上一篇中我们已经讲到了Controller的激活过程中已经说到了设置Controller的Controller ...
- Linux 学习手记(5):使用Vim文本编辑器
Vim是从vi发展而来的文本编辑器.vi是Linux及类Unix系统中主流的命令行文本编辑器,Vim 除了对vi功能上进行了加强,还加入了对GUI的支持.绝大多数的Linux系统上均安装了vim,vi ...
- SQLServer处理行转列和列转行
掌握SQL Server 行转列和列转行 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 ...
- arcgis union 0x80040218
我利用ArcGis中的union工具将两张图层叠加时,系统总是提示失败,这是什么原因?希望高手能够解决这个问题.图片是系统提示,表示看不懂哪里出错了? 你必须使用数据管理-要素-修复几何,源数据存在不 ...