`

HTTP-CLIENT支持的上传类型

    博客分类:
  • java
 
阅读更多

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 方法有两个参数,作用就像是表单的键值对 . 除非服务器端实际需要这些值并使用了这些参数名称,它们就是有干系的,否则它们就会被简单的忽略掉.

 

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值没有被指定,一些服务器将不会识别这个文件.

 

接下来,我们将一个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 .

分享到:
评论

相关推荐

    jersey-core、jersey-client jar包.rar

    在实现跨服务器文件上传时,首先需要配置jersey-client,设置目标服务器的URL、HTTP方法(通常是POST)以及文件的MIME类型。然后,使用jersey-client的API创建一个请求实体,将文件内容附加到请求中。此外,可能还...

    fastdfs-client-javajar1.29-SNAPSHOT.zip

    6. **元数据管理**:FastDFS允许在文件上传时附加元数据,这些元数据可用于存储关于文件的额外信息,如文件类型、创建日期等。 7. **负载均衡**:FastDFS的客户端库会自动处理服务器之间的负载均衡,确保文件操作的...

    fastdfs-client-java-master.zip

    标题中的"fastdfs-client-java-master.zip"是一个包含FastDFS客户端Java实现的压缩文件,这个库主要用来帮助Java应用程序与FastDFS分布式文件系统进行交互。FastDFS是一个开源的高性能、轻量级的分布式文件系统,...

    fastdfs-client-java1.26

    1. 文件上传:FastDFS-client-java支持将本地文件上传至FastDFS服务器,支持单文件和批量文件上传,且在上传过程中支持断点续传,确保文件传输的完整性。 2. 文件下载:可以按照文件ID或路径下载服务器上的文件,...

    fastdfs-client-1.26上传实例

    它提供了文件上传、下载等基本功能,同时也支持文件的访问统计、文件访问权限控制等高级特性。在本实例中,我们将探讨如何将FastDFS与Java环境整合,实现文件的上传操作。 首先,FastDFS客户端(fastdfs-client)是...

    FastDFS_Client-fastdfs-client-1.27.1.zip

    例如,使用`TrackerClient`和`StorageClient`类进行文件上传,调用`upload_file`方法,传入文件路径、文件名、MIME类型等信息即可。 五、实战演练 1. 文件上传:创建一个Java程序,初始化`TrackerClient`和`...

    fastdfs-client-java-master 官方客户端包 内涵详解和 jar包

    `fastdfs-client-java`是FastDFS官方提供的Java语言客户端,它提供了丰富的API,支持文件上传、下载、删除、文件元数据查询等功能。该客户端包主要包含以下部分: 1. 连接管理:负责建立和管理到FastDFS服务器的...

    org.apache.http相关jar包下载(httpcomponents-client-4.2.5-bin.tar)

    3. **httpmime.jar**: 提供了MIME类型的支持,对于上传文件或处理多部分/表单数据的POST请求非常有用。 4. **httpclient-cache.jar**: 提供了HTTP缓存功能,能够存储先前获取的响应以便于快速重复访问。 5. **...

    httpcomponents-client-4.5.5-bin.zip

    3. `httpmime-4.5.5.jar`:用于处理MIME类型的库,常用于上传文件或处理复杂的POST请求。 4. `httpclient-cache-4.5.5.jar`:缓存功能的实现,可以帮助减少网络请求,提高性能。 5. `httpasyncclient-4.1.4.jar`:...

    fastdfs-client-java-master.zip_fastdfs-Client-1.25_fastdfs_clien

    - **上传文件**:首先创建`File`对象,然后调用`FastDFSClient`的`uploadFile`方法,传入文件对象、文件类型等参数,返回文件的存储路径。 - **下载文件**:根据文件ID,调用`FastDFSClient`的`downloadFile`方法...

    httpcomponents-client-4.5.8.7z

    7. **多部分表单数据**:支持MIME类型的多部分表单数据提交,这对于上传文件或处理复杂表单数据非常有用。 8. **国际化与本地化**:HttpClient允许开发者处理不同字符集和语言的HTTP内容,适应全球化的应用需求。 ...

    Postman-REST-Client_v0.8.1.rar

    Postman提供了一个直观的用户界面,允许用户轻松构建各种类型的HTTP请求。用户可以设置URL、选择HTTP方法、添加请求头、填充查询参数或路径参数,甚至可以上传文件作为请求体。这对于测试不同场景下的API非常有用。 ...

    httpcomponents-client-4.5.6-bin.zip

    `httpmime`是HttpClient的一个扩展,主要处理MIME类型的数据,如表单数据、文件上传等。在4.5.6版本中,它提供了以下功能: 1. **MultipartEntityBuilder**:用于构建MIME类型的多部分实体,方便进行文件上传操作。 ...

    Python库 | pulpcore-client-3.9.0.dev1604665524.tar.gz

    2. **内容管理**:Pulpcore-Client支持对不同类型的软件包进行管理,包括但不限于RPM、deb和Python包。它能帮助用户高效地同步、分发和更新这些软件包到不同的环境中。 3. **仓库管理**:用户可以创建、更新和删除...

    谷歌插件Advanced-REST-client

    2. **Multipart/form-data上传**: 支持文件上传,适用于需要POST表单数据的场景。 3. **定时任务**: 可设置定时发送请求,用于模拟定期触发的API调用。 4. **脚本支持**: 使用JavaScript编写预请求和后请求脚本,...

    java-fastdfs-client

    4. 文件元数据操作:FastDFS允许在文件上传时附加元数据,如文件类型、大小等信息。客户端可以进行元数据的读取、修改和删除。 5. 文件访问:FastDFS支持HTTP协议访问文件,因此,通过Java FastDFS客户端,用户可以...

    PyPI 官网下载 | pulpcore-client-3.14.0.dev1624419840.tar.gz

    Pulp支持多种软件包格式,包括RPM、DEB、Python wheels等,因此`pulpcore-client`作为其客户端,允许开发者通过命令行接口或编程方式与Pulp服务器进行通信,实现对软件包的上传、下载、查询和管理等操作。...

    Python库 | pulp_container-client-1.1.0.dev1575049158.tar.gz

    1. **上传和下载**:库支持上传本地容器镜像到Pulp服务器,同时也可以从服务器下载镜像。 2. **查询和搜索**:可以查询服务器上已有的镜像信息,包括镜像的元数据,如标签、大小等,也可以通过特定条件进行搜索。 ...

    fastdfs-client-1.27.2.zip

    - 元数据操作:客户端可以设置和获取文件的元数据,元数据通常包括文件的创建时间、大小、类型等信息。 - 文件删除:客户端可以请求删除FastDFS服务器上的文件。 - 负载均衡:FastDFS客户端支持自动选择负载较轻的...

    Python库 | jelastic-client-1.2.4.tar.gz

    **Python库 - jelastic-client-1.2.4.tar.gz** `jelastic-client` 是一个专为Python开发者设计的库,用于与Jelastic云平台进行交互。Jelastic是一款自动化云平台,提供高度可扩展的环境,支持多种服务器技术,如...

Global site tag (gtag.js) - Google Analytics