转 使用 HttpClient 4 进行文件上传
http://www.tuicool.com/articles/Y7reYb
1. 概述本教程我们将描述如何使用 HttpClient 4进行一次多文件上传操作 . 我们将使用 http://echo.200please.com 作为测试服务器,因为它是面向公众的,并且接受大多数类型的内容. 如果你想要深入学习并了解你可以使用 HttpClient 做到的其它很棒的事情 – 那就去看看 首要的 HttpClient 教程吧 . 2. 使用 AddPart 方法让我们开始研究研究 MultipartEntityBuilder 对象,来向一个Http实体添加成分,它在稍后将会被通过一个POST操作上传. 这是向一个 HttpEntity添加成分来表示表单的一般方法 . 示例 2.1. - 使用两个文本成分和一个文件上传一个表单 File file = new File(textFileName, ContentType.DEFAULT_BINARY); 请注意我们也通过制定将会被服务器使用到的ContentType值来实例化File对象. 同样还请注意 addPart 方法有两个参数,作用就像是表单的键值对 . 除非服务器端实际需要这些值并使用了这些参数名称,它们就是有干系的,否则它们就会被简单的忽略掉. |
3. 使用 addBinaryBody 和 addTextBody 方法创建一个multipart实体更直接的方式就是使用 addBinaryBody 和 AddTextBody 方法. 这些方法服务于上传文本,文件,字符数组和 InputStream 对象. 我们用了一个简单的例子来描述如何使用它们 . 示例 3.1. - 上传一个文本和一个文本文件部分 HttpPost post = new HttpPost("http://echo.200please.com");
注意这里不需要 FileBody 和 StringBody 对象 同样重要的是,大多数服务器不会检查文本体的 ContentType , 因此 addTextBody 方法可能会忽略掉 ContentType 值 . addBinaryBody 的 API 接受一个 ContentType - 但是它也有可能从一个二进制体来创建实体,而对应名称的表单参数持有了这个文件. 如前面小节所述,如果ContentType值没有被指定,一些服务器将不会识别这个文件. |
|
接下来,我们将一个zip文件作为一个 InputStream 添加进来, 而图片文件将会被作为File对象被添加进来: 示例 3.2. - 上传一个Zip文件,一个图片文件和一个文本 块 HttpPost post = new HttpPost("http://echo.200please.com");
请注意ContentType值可以被动态创建,正如上面这个针对zip文件的示例中所示 . 最后,不是所有的服务器都接受 InputStream 部分. 我们在代码的第一行实体化的服务器可以接受 . 让我们现在来看看另外一个示例, addBinaryBody直接用于一个位数组 : 示例 3.3. - 上传一个位数组和文本 HttpPost post = new HttpPost("http://echo.200please.com");
留意 ContentType - 它现在被指定为二进制数据. 4. 总结本文呈现了 MultipartEntityBuilder 作为一个灵活的对象提供了创建一个 multipart 表单多种API. 示例同样也展示了如何使用HttpClient上传一个类似于表单实体的HttpEntity . 这些示例的所有实现和代码块在 我的github项目 中可以找到 – 这是一个基于Eclipse的项目, 因此可以很容易的导入并运行. |
转 使用 HttpClient 4 进行文件上传的更多相关文章
- HttpClient文件上传下载
1 HTTP HTTP 协议可能是如今 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序须要直接通过 HTTP 协议来訪问网络资源. 尽管在 JDK 的 java.net ...
- HttpClient构造文件上传
在项目中我们有时候需要使用到其他第三方的api,而有些api要求我们上传文件,search一下,下面将结果记录一下喽! 含义 ENCTYPE="multipart/form-data&quo ...
- springMVC + hadoop + httpclient 文件上传请求直接写入hdfs
1.首先是一个基于httpclient的java 应用程序,代码在这篇文章的开头:点击打开链接 2.我们首先写一个基于springMVC框架的简单接收请求上传的文件保存本地文件系统的demo,程序代码 ...
- HttpClient由Client客户端上传File文件流至Server服务端
客户端方法 public static void main(String[] args) { File file=new File("E:\\lucene\\rev\\全年平台受理量.doc ...
- Android开发之httpclient文件上传实现
文件上传可能是一个比較耗时的操作,假设为上传操作带上进度提示则能够更好的提高用户体验,最后效果例如以下图: 项目源代码:http://download.csdn.net/detail/shinay/4 ...
- HttpClient多文件上传代码及普通参数中文乱码问题解决
该随笔记录了在实际项目中使用HttpClient调用外部api,需上传文件和普通参数的代码. 笔者在使用 HttpClient 调用 http api 接口时,需要服务端上传文件和一些普通参数给 ht ...
- Java后台使用httpclient入门HttpPost请求(form表单提交,File文件上传和传输Json数据)
一.HttpClient 简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 ...
- (十)HttpClient以multipart/form-data上传文件
原文链接:https://blog.csdn.net/wsdtq123/article/details/78888734 POST上传文件 最早的HTTP POST是不支持文件上传的,给编程开发带来很 ...
- 使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
package org.caeit.cloud.dev.util; import java.io.File; import java.io.IOException; import java.io.Un ...
随机推荐
- WisKey的眼神
WisKey的眼神 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Sub ...
- parseSdkContent failed 解决方案
开Eclipse出现错误“parseSdkContent failed”,Android的模拟器启动不了.尝试了不少方法,终于搞定. 1.删除文件夹 C:\Documents and Settings ...
- jPaginate应用
分页结合bingojs需要注意两点 1.标签要放在bg-render外面 2.ajax请求参数包含一页显示多少条数据的字段,跟分页插件无关. 调用jPaginate插件的方法很简单: $('#page ...
- docker Swarm 集群发现
Node 发现 $swarm manage --discovery dockerhost01:,dockerhost02:,dockerhost03: -H= 文件发现 $swarm manage - ...
- ecshop订单状态对应值详解
ecshop的订单状态都是在ecs_order_info表中的字段里. 订单状态 未确认 取消 确认 已付款 配货中 已发货 已收货 退货 order_status 0 2 1 1 1 5 5 4 s ...
- js获取url传递参数,js获取url?号后面的参数
方法一.正则表达式 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + " ...
- PHP的抽象类、接口类的区别和选择【转载】
本文转自:http://blog.csdn.net/fanteathy/article/details/7309966 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关 ...
- BMP文件格式详解
BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广 ...
- Sublime console installation instructions install Package Control
instructions: import urllib2,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d1 ...
- First()、FirstOrDefault()、Single() 和 SingleOrDefault()的区别
Enumerable.First() 方法:返回序列中的第一个元素,如果源序列为空,则抛异常. Enumerable.FirstOrDefault ()方法返回序列中的第一个元素:如果序列中不包含任何 ...