httpclient组件使用经验
---------------------
文件上传:
---------------------
1.httpclient也可以使用putmethod方法
2.通过 putmethod.addRequestHeader(key,vaule)设置请求头部。也可设置一自定义的值,供服务端读出。
3.要实现文件上传不出现乱码问题,有以下几个注意点:
1)http协议的乱码部分分为URI部分、Header部分以及Body部分。
2)首先服务端的容器需要设置URI编码,如:tomcat配置文件中,对相关的访问端口设置URIEncoding="UTF-8"。
3)在服务端的web.xml中,设置fileter对编码进行过滤转码
4)对于uri中或是header中的中文在传间编码,服务端接收时解码。java.net.URLDecoder/URLEncoder.
4.文件上传的各种方式方法:
1)客户端可以通过将文件流直接塞进请求体RequestEntity,如:put.setRequestEntity(InputStreamRequestEntity entity),
服务端通过request.getInputStream()获取。
InputStream in = request.getInputStream(); // 文件流获取
OutputStream out = new FileOutputStream(file);
byte[] buffer = new byte[8196];
int n;
while((n = in.read(buffer, 0, buffer.length)) != -1) {
out.write(buffer, 0, n);
}
out.close();
2)客户端可以通过Part与MultipartRequestEntit方式,将上传内容塞进请求体。
服务端通过request.getInputStream()方式-----这种有可能上传文件不能看。
客户端塞内容:
File targetFile = new File("1.mp3");
Part[] parts = { new FilePart(targetFile.getName(), targetFile) };
filePost.setRequestEntity(new MultipartRequestEntity(parts,filePost.getParams()));
HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
int status = client.executeMethod(filePost);
服务端取内容:
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Set factory constraints
factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
factory.setRepository(tempPathFile);// 设置缓冲区目录
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint
upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB
List<FileItem> items = upload.parseRequest(request);// 得到所有的文件
Iterator<FileItem> i = items.iterator();
while (i.hasNext())
{
FileItem fi = (FileItem) i.next();
String fileName = fi.getName();
if (fileName != null)
{
File fullFile = new File(fi.getName());
File savedFile = new File(uploadPath, fullFile.getName());
fi.write(savedFile);
}
3)还有其它方式,如直接使用MultipartPostMethod方法上传。还没有深入研究。
4.文件流读取使用OutputStream写入时需要注意:
OutputStream有几种write方法,尽量采用write(byte[] b, int off, int len)方法。
write(byte[] b) : 使用些方法写入,容易使文件比原文件增大0~你指定的len大小。从而使你的文件可以无法正常显示。尤其在最后一片的读写时易增大。
write(byte[] b, int off, int len):每次跟据读入情况,确定每次写入大小,不易出现异常。
write(int b) :
OutputStream out = new FileOutputStream(file);
byte[] buffer = new byte[8196];
int n;
while((n = in.read(buffer, 0, buffer.length)) != -1) {
System.out.println("------n--------" +n);
System.out.println("------buffer--------" +buffer.length);
out.write(buffer, 0, n);
}
out.close();
如上文中所错的测试结果:
------buffer--------8196
------n--------7983
.......
------buffer--------8196
------n--------7983
------buffer--------8196
------n--------3114
------buffer--------8196
说明:每次buffer的读取都未读满,不知是何原因。将指定的buffer大小改成2048再试:
--------------------------
遗留问题:
1.tomcat 中设置编码的作用?
2.web.xml中的filter的具体作用?
3.各种塞文件内容与取的方式,是否可以混 用?如果不能混用,他们的差异在哪,如何明确配对? 上面的方法是试过可行的,暂这么用。需要进一步了解深入。
4.在使用httpclient上传时,出现第次读的buffer示能读满,不知是何原因?
----------------------
文件头的设置:
分享到:
相关推荐
本篇文章将详细讲解HttpClient的使用方法,包括如何搭建环境、所需的jar包、基本应用以及实例演示,旨在帮助初级学员快速掌握HttpClient的基础操作。 一、环境搭建 在使用HttpClient之前,首先需要在项目中引入...
1. Commons-HTTPClient组件的主库文件:commons-httpclient-3.1.jar 2. 编码解码支持库:commons-codec-1.3.jar,用于处理编码相关的问题。 3. 日志功能组件:可能需要Commons-Logging,以便记录和调试网络通信的...
HttpClient组件的主要特点和功能包括: 1. 实现了HTTP 1.0和1.1的所有方法,如GET、POST、PUT、DELETE、HEAD、OPTIONS和TRACE。 2. 支持Cookie管理,方便处理用户会话。 3. 支持HTTPS加密操作,可以通过HTTP代理进行...
使用HttpClient组件可以轻松地实现这一任务。但是,在实际使用中,经常会遇到字符集编码乱码问题。本文将讨论如何使用HttpClient 3.0解析HTML,并解决字符编码问题。 HttpClient组件简介 Apache HttpClient是一个...
ApacheCommons-HTTPClient组件的应用.doc
《HttpClient组件及其在Android开发中的应用探讨》 HttpClient组件是Apache Jakarta Commons项目的一部分,为Java客户端编程提供了高效、全面的HTTP协议支持。在Web应用开发中,HttpClient不仅能够实现GET、POST、...
在Java项目中使用HttpClient时,为了确保功能的完整性和正确性,通常需要引入一系列的jar包。这些jar包包含了HttpClient的核心组件、依赖库和其他必要的工具,它们共同构成了HttpClient的运行环境。 以下是一些关键...
.NET CORE HttpClient 的使用方法 .NET CORE 中的 HttpClient 是一个非常重要的组件,它提供了一个强大且灵活的方式来发送 HTTP 请求。然而,在使用 HttpClient 时,我们需要注意一些重要的配置和使用方法,以避免...
在开始使用HttpClient之前,需确保已正确安装并配置相关组件: 1. **下载HttpClient**:访问官方页面`http://jakarta.apache.org/commons/httpclient/downloads.html`下载最新版本。 2. **集成Commons Logging**:...
《HttpClient 4.0 使用详解:访问开心网组件实例》 HttpClient 是 Apache 开源基金会提供的一个 HTTP 客户端库,被广泛应用于 Java 开发中,用于执行 HTTP 请求。HttpClient 4.0 版本引入了许多改进和新特性,使得...
HttpClient是Apache开源组织Jakarta Commons项目中的一个组件,版本为2.0RC2,它的主要目的是简化HTTP客户端与服务器之间的通信编程。HttpClient提供了丰富的API,能够处理各种复杂的HTTP请求,包括处理COOKIE、上传...
本文将深入探讨httpclient.jar包,以及它与code.jar包的关系,帮助开发者更好地理解和使用这两个组件。 httpclient.jar是Apache HttpClient库的核心组件,它提供了全面的HTTP协议支持,包括HTTP/1.1和部分HTTP/2。...
《JAVA中使用HttpClient:commons-httpclient-3.0.jar详解》 在JAVA开发中,进行HTTP请求时,Apache的HttpClient库是一个不可或缺的工具。本文将深入解析`commons-httpclient-3.0.jar`,它是HttpClient的一个重要...
本篇将详细讲解如何使用`HttpClient`进行异步请求数据,并结合Android的`AsyncTask`来处理后台任务,避免阻塞UI线程。 首先,理解`HttpClient`的基本使用方法。`HttpClient`包含几个关键组件,如`HttpClient`实例、...
在实际使用HttpClient时,需要根据项目需求选择合适的版本,理解其工作原理,正确配置和使用相关组件,以实现高效且可靠的HTTP通信。同时,及时关注Apache HttpClient的更新,以便利用新特性并修复已知问题。
在实际应用中,HttpClient通常与Apache的HttpComponents一起使用,这些组件提供了更全面的HTTP协议支持。HttpClient适用于单次请求,但如果需要进行大量的并发请求,可能需要考虑使用更高级的异步模型,如Apache ...
首先,HttpClient的主要组件包括: 1. **HttpClient实例**:这是整个HTTP通信的核心,负责管理连接、请求和响应。通常,我们创建一个HttpClient实例,并设置其配置参数,如连接超时、重试策略等。 2. **HttpHost**...
2. **httpcore-4.4.13.jar**:HTTP Core是HTTPClient的基础,提供了网络通信的基本组件,包括TCP连接、输入/输出流和HTTP协议解析器。它是HTTPClient与操作系统进行网络交互的桥梁。 3. **httpmime-4.5.13.jar**:...