HttpClient 上传文件

在本教程中,我们将演示如何使用Apache HttpClient 4.5进行分段上传http请求。

Maven依赖关系

我们使用maven来管理依赖关系,并使用Apache HttpClient 4.5版本。 将以下依赖项添加到您的项目中。

pom.xml 文件的内容如下 -

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.yiibai.httpclient.httmethods</groupId>
    <artifactId>http-get</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <url>https://memorynotfound.com</url>
    <name>httpclient - ${project.artifactId}</name>

    <dependencies>
        <!-- Apache Commons IO -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>


HttpClient分段上传请求示例

在这个例子中,我们将演示如何使用HttpClient 4.5来分段上传文件。 我们使用MultipartEntityBuilder创建一个HttpEntity。 当创建构建器时,添加一个二进制体 - 包含将要上传的文件以及一个文本正文。 接下来,使用RequestBuilder创建一个HTTP请求,并分配先前创建的HttpEntity

文件:HttpClientMultipartUploadExample.java -

import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.File;
import java.io.IOException;

/**
 * This example demonstrates the use of {@link HttpPost} request method.
 * And sending Multipart Form requests
 */
public class HttpClientMultipartUploadExample {

    public static void main(String... args) throws IOException {

        try (CloseableHttpClient httpclient = HttpClients.createDefault()) {

            File file = new File(HttpClientMultipartUploadExample.class.getResource("/java-duke.png").getFile());
            String message = "This is a multipart post";

            // build multipart upload request
            HttpEntity data = MultipartEntityBuilder.create()
                    .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
                    .addBinaryBody("upfile", file, ContentType.DEFAULT_BINARY, file.getName())
                    .addTextBody("text", message, ContentType.DEFAULT_BINARY)
                    .build();

            // build http request and assign multipart upload data
            HttpUriRequest request = RequestBuilder
                    .post("http://httpbin.org/post")
                    .setEntity(data)
                    .build();

            System.out.println("Executing request " + request.getRequestLine());

            // Create a custom response handler
            ResponseHandler<String> responseHandler = response -> {
                int status = response.getStatusLine().getStatusCode();
                if (status >= 200 && status < 300) {
                    HttpEntity entity = response.getEntity();
                    return entity != null ? EntityUtils.toString(entity) : null;
                } else {
                    throw new ClientProtocolException("Unexpected response status: " + status);
                }
            };
            String responseBody = httpclient.execute(request, responseHandler);
            System.out.println("----------------------------------------");
            System.out.println(responseBody);
        }
    }
}


所有先前的分段文件上传都包含在带有相应标头消息中。执行上面示例代码,得到以下结果 -

Executing request POST http://httpbin.org/post HTTP/1.1
----------------------------------------
{
  "args": {}, 
  "data": "", 
  "files": {
    "upfile": "data:application/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgAAAj....."
  }, 
  "form": {
    "text": "This is a multipart post"
  }, 
  "headers": {
    "Accept-Encoding": "gzip,deflate", 
    "Connection": "close", 
    "Content-Length": "53697", 
    "Content-Type": "multipart/form-data; boundary=SqncIg58wNoviG6dWynFmxPJnvICdQg", 
    "Host": "httpbin.org", 
    "User-Agent": "Apache-HttpClient/4.5.5 (Java/1.8.0_65)"
  }, 
  "json": null, 
  "origin": "112.67.166.104", 
  "url": "http://httpbin.org/post"
}
2019-04-09 23:05

相关知识点

知识点

相关教程

更多

HttpClient CacheConfig缓存处理示例

是如何设置基本缓存HttpClient的简单示例。 按照配置,它将存储最多3000个缓存对象,其中每个对象的最大主体大小可能为10240字节。 我们配置CacheConfig并使用这个配置来创建HttpClient。 循环执行一次简单的HTTP GET请求3次,并期望最后两个请求将被缓存。

HttpClient DELETE请求示例

本教程演示如何使用Apache HttpClient 4.5创建Http DELETE请求。 HTTP DELETE请求方法请求删除由URI指定的资源。

Httpclient整合Spring教程

Httpclient和Spring的整合就是把直接new对象的方式改为spring配置即可  1、首先看spring配置文件 spring-context.xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/s

关于一个文件上传的问题

在JSP中有一个组件<input type="file"/>,我想把上传类型设置为只能是jpg、bmp,就是说打开的时候,只能浏览到这2种类型,另外设置一个上传大小的限制,请问应该怎么做呢?谢谢!  问题补充:  我是说,在前台就判断,只能浏览到符合类型的文件

HttpClient 重定向处理

HttpClient自动处理所有类型的重定向,除了HTTP规范明确禁止的那些重定向需要用户干预。 请参阅其他(状态码303)在POST上重定向,并且按照HTTP规范的要求将PUT请求转换为GET请求。 可以使用自定义重定向策略来放宽由HTTP规范施加的对POST方法的自动重定向的限制。 在下面的教程中,我们将使用LaxRedirectStrategy来处理http重定向。

HttpClient PUT请求示例

本教程演示如何使用Apache HttpClient 4.5发出Http PUT请求。 HTTP PUT请求方法请求服务器接受并存储提供的URI中包含的实体。 如果该URI引用已经存在的资源,则该资源被修改; 如果URI不指向现有资源,则服务器可以使用该URI创建资源。

httpclient依懒包官网下载及httpclient maven依懒包获取

httpclient官网 http://hc.apache.org/ httpclient下载地址 http://hc.apache.org/downloads.cgi 现在最新稳定版为HttpClient 4.4  HttpClient 4.4 (GA) KEYS  Release Notes   Binary    4.4.tar.gz [md5] [pgp] 4.4.zip [md5] [p

HttpClient 请求添加Header头部信息

HTTP消息可以包含许多描述消息属性的标头,例如内容长度,内容类型,授权等。 HttpClient提供了检索,添加,删除和枚举标头的方法。 在下面的教程中,我们将演示如何将自定义HTTP头添加到HttpClient和Http请求方法。

谁用过commons-httpclient.jar,使用它来下载文件?

谁用过commons-httpclient.jar,使用它来下载文件?  下面是我的代码,放在main方法中可直接运行  String url = "http://lrc.aspxp.net/lrc.asp?id=291415&id1=174&t=lrc&ac=dl"; HttpClient http = new HttpClient(); //http

HttpClient 异常与重试机制

创建自定义HttpRequestRetryHandler以启用自定义异常恢复机制。 当使用这个接口时,需要实现retryRequest方法。 这使我们能够定义一个自定义的重试计数机制和异常恢复机制

问题:关于TXT文件的上传和读取。

现在要做一个功能是将TXT文件上传到服务器的工程目录的临时文件夹下面,然后读取该TXT文件,请问大家该怎么做?主要是前面那个步骤。

fancyupload实现文件上传问题

fancyupload实现文件上传问题  最近的项目中要使用文件上传的组件,找到了fancyupload,在IE7中可以正常使用,但是在IE6中第一次打开是好的,刷新了页面,再开的时候IE就会报错关闭,不知道有没有人遇到过这种情况,怎么解决呢?我用的是fancyupload3.0的。注:我是以浮动层加载iframe来打开这个上传页面的。  问题补充:  swfupload是最先试的,在同事那里可以

httpclient get请求

httpclient get进行get请求步骤:  1、创建Httpclient对象  HttpClients.createDefault();   2、创建http GET请求对象  new HttpGet(url);   3、执行请求  httpclient.execute(httpGet);   4、获取返回相关信息,如状态码、内容  response.getStatusLine().get

HttpClient 获取HTTPS证书和忽略证书错误

使用Apache HttpClient 4.5从资源服务器获取证书。 证书用于通过使用SSL / TLS的HTTPS保护客户端和服务器之间的连接。 当您需要有关证书的详细信息时,例如:证书何时到期?谁颁发证书?等等。或者在某些情况下需要读取服务器证书。

Spring MVC文件上传


                            

最新教程

更多

java线程状态详解(6种)

java线程类为:java.lang.Thread,其实现java.lang.Runnable接口。 线程在运行过程中有6种状态,分别如下: NEW:初始状态,线程被构建,但是还没有调用start()方法 RUNNABLE:运行状态,Java线程将操作系统中的就绪和运行两种状态统称为“运行状态” BLOCK:阻塞状态,表示线程阻塞

redis从库只读设置-redis集群管理

默认情况下redis数据库充当slave角色时是只读的不能进行写操作,如果写入,会提示以下错误:READONLY You can't write against a read only slave.  127.0.0.1:6382> set k3 111  (error) READONLY You can't write against a read only slave. 如果你要开启从库

Netty环境配置

netty是一个java事件驱动的网络通信框架,也就是一个jar包,只要在项目里引用即可。

Netty基于流的传输处理

​在TCP/IP的基于流的传输中,接收的数据被存储到套接字接收缓冲器中。不幸的是,基于流的传输的缓冲器不是分组的队列,而是字节的队列。 这意味着,即使将两个消息作为两个独立的数据包发送,操作系统也不会将它们视为两个消息,而只是一组字节(有点悲剧)。 因此,不能保证读的是您在远程定入的行数据

Netty入门实例-使用POJO代替ByteBuf

使用TIME协议的客户端和服务器示例,让它们使用POJO来代替原来的ByteBuf。

Netty入门实例-时间服务器

Netty中服务器和客户端之间最大的和唯一的区别是使用了不同的Bootstrap和Channel实现

Netty入门实例-编写服务器端程序

channelRead()处理程序方法实现如下

Netty开发环境配置

最新版本的Netty 4.x和JDK 1.6及更高版本

电商平台数据库设计

电商平台数据库表设计:商品分类表、商品信息表、品牌表、商品属性表、商品属性扩展表、规格表、规格扩展表

MongoDB常用命令

查看当前使用的数据库    > db    test  切换数据库   > use foobar    switched to db foobar  插入文档    > post={"title":"领悟书生","content":"这是一个分享教程的网站","date":new

快速了解MongoDB【基本概念与体系结构】

什么是MongoDB MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

windows系统安装MongoDB

安装 下载MongoDB的安装包:mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi,按照提示步骤安装即可。 安装完成后,软件会安装在C:\Program Files\MongoDB 目录中 我们要启动的服务程序就是C:\Program Files\MongoDB\Server\3.2\bin目录下的mongod.exe,为了方便我们每次启动,我

Spring boot整合MyBatis-Plus 之二:增删改查

基于上一篇springboot整合MyBatis-Plus之后,实现简单的增删改查 创建实体类 添加表注解TableName和主键注解TableId import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baom

分布式ID生成器【snowflake雪花算法】

基于snowflake雪花算法分布式ID生成器 snowflake雪花算法分布式ID生成器几大特点: 41bit的时间戳可以支持该算法使用到2082年 10bit的工作机器id可以支持1024台机器 序列号支持1毫秒产生4096个自增序列id 整体上按照时间自增排序 整个分布式系统内不会产生ID碰撞 每秒能够产生26万ID左右 Twitter的 Snowflake分布式ID生成器的JAVA实现方案

Spring boot整合mybatis plus

快速了解mybatis plus 是对Mybatis框架的二次封装和扩展 纯正血统:完全继承原生 Mybatis 的所有特性 最少依赖:仅仅依赖Mybatis以及Mybatis-Spring 性能损耗小:启动即会自动注入基本CURD ,性能无损耗,直接面向对象操作 自动热加载:Mapper对应的xml可以热加载,大大减少重启Web服务器时间,提升开发效率 性能分析:自带Sql性能分析插件,开发测试