`
m635674608
  • 浏览: 5021943 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用 HttpClient 4 进行文件上传

 
阅读更多

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

HttpPost post = new HttpPost("http://echo.200please.com");

FileBody fileBody = new FileBody(file);

StringBody stringBody1 = new StringBody("Message 1", ContentType.MULTIPART_FORM_DATA);

StringBody stringBody2 = new StringBody("Message 2", ContentType.MULTIPART_FORM_DATA);

// 

MultipartEntityBuilder builder = MultipartEntityBuilder.create();

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

builder.addPart("upfile", fileBody);

builder.addPart("text1", stringBody1);

builder.addPart("text2", stringBody2);

HttpEntity entity = builder.build();

//

post.setEntity(entity);

HttpResponse response = client.execute(post);

请注意我们也通过制定将会被服务器使用到的ContentType值来实例化File对象.

同样还请注意 addPart 方法有两个参数,作用就像是表单的键值对 . 除非服务器端实际需要这些值并使用了这些参数名称,它们就是有干系的,否则它们就会被简单的忽略掉.

leoxu

leoxu

翻译于 1年前

0人顶

顶 翻译的不错哦!

3. 使用 addBinaryBody 和 addTextBody 方法

 

创建一个multipart实体更直接的方式就是使用 addBinaryBody 和 AddTextBody  方法. 这些方法服务于上传文本,文件,字符数组和 InputStream 对象. 我们用了一个简单的例子来描述如何使用它们 .

示例 3.1. - 上传一个文本和一个文本文件部分

 

HttpPost post = new HttpPost("http://echo.200please.com");

File file = new File(textFileName);

String message = "This is a multipart post";

MultipartEntityBuilder builder = MultipartEntityBuilder.create();

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

builder.addBinaryBody("upfile", file, ContentType.DEFAULT_BINARY, textFileName);

builder.addTextBody("text", message, ContentType.DEFAULT_BINARY);

// 

HttpEntity entity = builder.build();

post.setEntity(entity);

HttpResponse response = client.execute(post);

注意这里不需要 FileBody 和 StringBody 对象

同样重要的是,大多数服务器不会检查文本体的 ContentType , 因此 addTextBody 方法可能会忽略掉 ContentType 值 .

 addBinaryBody 的 API 接受一个 ContentType - 但是它也有可能从一个二进制体来创建实体,而对应名称的表单参数持有了这个文件. 如前面小节所述,如果ContentType值没有被指定,一些服务器将不会识别这个文件.

leoxu

leoxu

翻译于 1年前

0人顶

顶 翻译的不错哦!

接下来,我们将一个zip文件作为一个 InputStream 添加进来, 而图片文件将会被作为File对象被添加进来:

示例 3.2. - 上传一个Zip文件,一个图片文件和一个文本块

 

HttpPost post = new HttpPost("http://echo.200please.com");

InputStream inputStream = new FileInputStream(zipFileName);

File file = new File(imageFileName);

String message = "This is a multipart post";

MultipartEntityBuilder builder = MultipartEntityBuilder.create();         

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

builder.addBinaryBody

  ("upfile", file, ContentType.DEFAULT_BINARY, imageFileName);

builder.addBinaryBody

  ("upstream", inputStream, ContentType.create("application/zip"), zipFileName);

builder.addTextBody("text", message, ContentType.TEXT_PLAIN);

// 

HttpEntity entity = builder.build();

post.setEntity(entity);

HttpResponse response = client.execute(post);

请注意ContentType值可以被动态创建,正如上面这个针对zip文件的示例中所示 .

最后,不是所有的服务器都接受 InputStream 部分. 我们在代码的第一行实体化的服务器可以接受 .

让我们现在来看看另外一个示例, addBinaryBody直接用于一个位数组 :

示例 3.3. - 上传一个位数组和文本

 

HttpPost post = new HttpPost("http://echo.200please.com");

String message = "This is a multipart post";

byte[] bytes = "binary code".getBytes(); 

// 

MultipartEntityBuilder builder = MultipartEntityBuilder.create();

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

builder.addBinaryBody("upfile", bytes, ContentType.DEFAULT_BINARY, textFileName);

builder.addTextBody("text", message, ContentType.TEXT_PLAIN);

// 

HttpEntity entity = builder.build();

post.setEntity(entity);

HttpResponse response = client.execute(post);

留意ContentType - 它现在被指定为二进制数据.

4. 总结

 

本文呈现了 MultipartEntityBuilder 作为一个灵活的对象提供了创建一个 multipart 表单多种API.

示例同样也展示了如何使用HttpClient上传一个类似于表单实体的HttpEntity .

这些示例的所有实现和代码块在 我的github项目 中可以找到 – 这是一个基于Eclipse的项目, 因此可以很容易的导入并运行.

 

http://www.oschina.net/translate/httpclient-multipart-upload

分享到:
评论

相关推荐

    https+spring3+httpclient4多文件上传

    使用HttpClient4进行文件上传,首先需要创建`CloseableHttpClient`实例,然后定义`HttpPost`请求,设置目标URL(通常是HTTPS URL)。接着,使用`MultipartEntityBuilder`创建一个多部分实体,添加文件内容并设置...

    HttpClient 4 - 文件上传

    HttpClient 4 版本引入了许多改进,使得文件上传变得更加简单和高效。在这个主题中,我们将深入探讨HttpClient 4如何实现文件上传,以及相关的核心概念和技术。 首先,我们需要了解HttpClient 4的基本用法。...

    HttpClient 4文件上传

    通过上述代码示例,我们可以看到使用Apache HttpClient 4.x版本进行文件上传的过程。关键在于正确构建`MultipartEntity`对象,以及处理好请求和响应过程中可能出现的各种异常情况。同时,需要注意解决中文乱码等问题...

    使用HttpClient实现文件的上传所需lib

    在Java开发中,HttpClient是一个非常重要的库,它允许...通过理解和熟练运用这些知识点,开发者能够使用HttpClient有效地实现文件上传功能。在实际项目中,还需要结合具体的业务需求和服务器端接口来调整和优化代码。

    httpclient和RestfuL风格上传下载文件

    在HTTPClient中,文件上传通常涉及使用`MultipartEntityBuilder`或`HttpEntityEnclosingRequestBase`类。你需要创建一个multipart/form-data格式的请求体,然后将文件流添加到请求中。RESTful服务端通常会提供一个...

    四、使用HttpClient上传测试文件服务器

    下面我们将详细介绍如何使用HttpClient进行文件上传: 1. **配置HttpClient**: 首先,我们需要创建一个HttpClient实例并进行配置。这包括设置连接超时、重试策略、HTTP连接管理器等。例如,我们可以使用`...

    java使用HttpClient通过url下载文件到本地

    在这个特定的场景中,我们利用HttpClient来从指定的URL下载文件到本地。以下是对这个主题的详细阐述: 1. **HttpClient介绍**: HttpClient是一个Java库,支持HTTP/1.1协议以及部分HTTP/2特性。它提供了一组高级...

    httpclient 文件上传 下载

    它提供了丰富的功能,包括文件上传和下载,支持请求流,以及处理JSON和XML数据。在本例中,我们关注的是HTTPClient 4版本,这是一个稳定且功能强大的版本,适用于多种网络交互场景。 文件上传通常涉及到HTTP的POST...

    httpClient上传文件

    在Java编程中,Apache HttpClient库是一个非常常用的工具,用于...以上就是使用Apache HttpClient进行文件上传的基本流程和技术细节,以及相关的Servlet处理部分。在实际开发中,还需要根据具体需求进行调整和优化。

    httpclient4上传文件中文乱码问题解决办法代码示例

    服务器端自己写,本示例为客户端代码,可以解决httpClient4乱码问题,是替代修改源码的最佳写法。

    HttpClient 文件上传

    在这个场景中,我们主要关注如何使用HttpClient进行文件上传。 文件上传通常涉及到Web服务器与客户端之间的交互,比如用户通过网页上传图片或文档到服务器。HttpClient库提供了一个方便的接口来实现这种功能。以下...

    HttpClient上传文件需要的Jar包

    在这个场景中,"HttpClient上传文件需要的Jar包"指的是在使用HttpClient进行文件上传操作时,你需要确保引入了正确的依赖库。 首先,我们需要了解HttpClient的基本概念。HttpClient是Apache软件基金会的一个项目,...

    HttpClient PostMethod 上传文件

    提供的Demo项目可能包含了使用HttpClient发送GET和POST请求的完整示例代码,包括文件上传和乱码处理。通过对这些代码的分析和学习,你可以更好地理解和应用HttpClient进行网络通信。 总的来说,HttpClient是Java...

    httpClient文件上传

    使用httpclient上传文件, CloseableHttpClient httpClient = HttpClientBuilder.create().build();

    httpclient 上传文件

    总结起来,使用HTTPClient进行文件上传涉及创建POST请求、构建多部分实体、设置字符集,以及正确处理响应。乱码问题通常源于字符集不匹配,需在客户端和服务器端都进行适当的设置。理解这些知识点有助于在实际开发中...

    HttpClient实现POST GET和文件下载

    文件上传通常涉及Multipart/form-data格式,可以使用`MultipartEntityBuilder`来构造请求实体: 1. **创建HttpPost请求**:设定目标URL。 2. **构建MultipartEntity**:使用`MultipartEntityBuilder`添加文件和其他...

    Android使用HttpClient上传文件到服务器完整实例

    需要注意的是,由于Android API 23以后HttpClient被弃用,推荐使用`OkHttp`或者`Retrofit`等现代的网络库进行文件上传。但如果你的项目支持较低的Android版本,HttpClient仍然是一个可行的选择。 总结来说,Android...

Global site tag (gtag.js) - Google Analytics