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 基础教程
- httpclient依懒包官网下载及httpclient maven依懒包获取
- httpClient快速入门
- httpclient get请求
- httpclient 带参数 get 请求
- httpclient post 请求
- httpclient 模拟浏览器请求
- httpclient post 表单参数请求
- HttpClient PUT请求示例
- HttpClient DELETE请求示例
httpclient 进阶教程
相关知识点
知识点
相关教程
更多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性能分析插件,开发测试