`

HttpClient 4 - 文件上传

阅读更多
httpclient上传文件实际上就是模拟一个http的表单提交请求。
package test.httpclient4;

import java.io.File;
import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class SendFile {

	public static void main(String[] args) throws ClientProtocolException,
			IOException {
		HttpClient httpclient = new DefaultHttpClient();
		//请求处理页面
		HttpPost httppost = new HttpPost(
				"http://localhost:8080/webtools/upload.jsp");
		//创建待处理的文件
		FileBody file = new FileBody(new File("d:/22.rar"));
		//创建待处理的表单域内容文本
		StringBody descript = new StringBody("0431.la");

		//对请求的表单域进行填充
		MultipartEntity reqEntity = new MultipartEntity();
		reqEntity.addPart("file", file);
		reqEntity.addPart("descript", descript);
		//设置请求
		httppost.setEntity(reqEntity);
		//执行
		HttpResponse response = httpclient.execute(httppost);
		//HttpEntity resEntity = response.getEntity();
		//System.out.println(response.getStatusLine());
		if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){
			HttpEntity entity = response.getEntity();
			//显示内容
			if (entity != null) {
				System.out.println(EntityUtils.toString(entity));
			}
			if (entity != null) {
				entity.consumeContent();
			}
		}
	}
}

这里说明一下 需要一个额外的包,apache 的mime4j 的lib。

就这么简单 over。
Java开发Q群:46176507
  • lib.rar (964.4 KB)
  • 下载次数: 1322
分享到:
评论
4 楼 qljobs 2010-12-22  
你好!请问:我用HttpClient4.0写了一个上传工具,同时我还写了一个图片上传的测试项目,并且在这个项目上面判断了图片是否为空以及图片大小等等。当我用HttpClient4.0上传图片到这个测试项目时,它提示报错说图片为空!请问这个是怎么回事啊?谢谢!以下是HttpClient4.0的部分代码: 
1.MultipartEntity mpartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);  
2.  
3. File file = new File("F:/Private/Photo/She/S1.gif");  
4.  
5. if(!file.isFile()){  
6.  
7. System.out.println("--------------不是文件------------");  
8. }  
9.  
10. mpartEntity.addPart("explain", new StringBody(""));  
11.  
12. mpartEntity.addPart("foreign", new StringBody("4"));  
13.  
14. mpartEntity.addPart("type", new StringBody("1"));  
15.  
16. mpartEntity.addPart("imgFile", new FileBody(file));  
注:我在浏览器上面对测试项目进行上传没有错误,一切正常。 

为什么会这样啊,谢谢!
3 楼 spiritfrog 2009-12-11  
楼下的,中文处理,是需要改源代码的。不过以下是对于3.0的处理

参看FilePart;其源代码中有这样一段:

protected void sendDispositionHeader(OutputStream out)
    throws IOException {
        LOG.trace("enter sendDispositionHeader(OutputStream out)");
        super.sendDispositionHeader(out);
        String filename = this.source.getFileName();
        if (filename != null) {
            out.write(FILE_NAME_BYTES);
            out.write(QUOTE_BYTES);
            out.write(EncodingUtil.getAsciiBytes(filename));
            out.write(QUOTE_BYTES);
        }
    }

可以看出在转换文件名时,用的方法是EncodingUtil.getAsciiBytes(),查看这个方法源码为data.getBytes("US-ASCII"),因此中文文件名必定乱码,不管你是否调用了setCharSet("GBK")方法。

解决很简单:

   out.write(EncodingUtil.getBytes(filename, getCharSet()));
2 楼 spiritfrog 2009-12-11  
感谢,我缺少了mime4j 的包,总是类型不匹配。
1 楼 tiantianzzz 2009-10-27  
请教下中文文件名是怎么处理的...

相关推荐

    httpcore-4.2.4,httpclient-4.2.5,httpclient-cache-4.2.5,httpmime-4.2.5的jar包下载

    它提供了类和方法来创建和解析复杂的Multipart MIME消息,这是上传文件或发送包含多个部分的HTTP请求所必需的。 这些jar包通常被集成到Java项目中,用于实现与Web服务的交互,如微信退款服务所提到的场景。微信退款...

    commons-httpclient-3.0-rc4.rar

    Apache Commons HttpClient 是一个高度可定制的HTTP客户端实现,支持从简单的GET请求到复杂的POST操作,包括文件上传、Cookie管理、重定向处理、HTTP认证等。它提供了一个强大的API,使得开发者能够轻松地创建、发送...

    commons-httpclient-3.0-rc2.jar.zip

    除了基本的HTTP请求,HttpClient还支持复杂的请求构造,如设置请求头、携带POST数据、处理文件上传等。同时,它还提供了异常处理机制,使得开发者能够优雅地处理可能出现的网络错误和HTTP状态异常。 总结来说,...

    HttpClient-4.3.6

    - `httpmime-4.3.6.jar`:支持MIME类型的HTTP请求,例如上传文件。 - `httpclient-cache-4.3.6.jar`:实现了HTTP缓存机制,可以提高性能和减少网络流量。 - `httpcore-nio-4.3.3.jar`:非阻塞I/O的实现,适用于高...

    HttpClient 4文件上传

    ### HttpClient 4 文件上传知识点详解 #### 一、概述 在Java开发中,经常会遇到需要通过HTTP协议上传文件的需求。Apache HttpClient是一个强大的客户端HTTP组件,它不仅支持HTTP协议,还能处理HTTPS请求,并提供了...

    httpclient--jar包

    - **文件上传下载**:通过POST或PUT方法上传文件,使用GET方法下载文件。 - **模拟登录**:处理登录过程,包括提交表单数据、处理验证码等。 - **自动化测试**:在测试框架中模拟用户行为,测试Web应用的功能。 ...

    httpclient-4.5使用需要的所有jar包

    3. **httpmime-4.5.13.jar**:这个库提供了MIME类型支持,允许HTTPClient处理多部分表单数据和文件上传。这对于发送复杂的POST请求,尤其是涉及到上传文件的场景非常有用。 4. **httpasyncclient-4.1.4.jar**:...

    httpclient-4.5.jar

    这个库扩展了HttpClient,使其能够处理MIME类型的请求和响应,比如上传文件或处理multipart/form-data请求。 3. `httpclient-cache-4.x.jar`:这个模块提供了HTTP缓存功能,可以根据HTTP缓存规范存储和检索已请求的...

    httpclient httpclient-4.3

    4. **强大的请求和响应处理**:支持 GET、POST、PUT、DELETE 等多种请求方法,以及丰富的头信息和请求体处理,包括文件上传、JSON 数据传递等。 5. **重试和恢复策略**:HttpClient 可以配置重试策略,自动处理常见...

    httpClient组合包.zip

    3. **httpmime-4.5.13.jar**:这个库专门用于处理HTTP请求中的MIME类型数据,特别是当需要发送复杂或二进制数据时,如文件上传。它提供了MultipartEntityBuilder类,可以方便地构造包含多个部分的POST请求,每部分...

    https+spring3+httpclient4多文件上传

    标题 "HTTPS + Spring3 + HttpClient4 多文件上传" 涉及到的是在Java环境中,使用Spring3框架和Apache HttpClient4库实现通过HTTPS协议上传多个文件的技术。这个主题涵盖了几大关键知识点,包括HTTPS安全通信、...

    httpclient-4.3.1.jar,httpcore-4.3.2.jar和httpmime-4.3.5.jar

    4.3.5版本提供了对MIME类型的解析和创建,支持复杂表单提交、文件上传、多部分/边界编码等。在进行Web服务调用,尤其是涉及文件传输时,HttpMime扮演了关键角色。 在实际开发中,这三者通常一起使用。HttpCore提供...

    httpclient-4.4.1.jar+httpcore-4.2-beta1.jar

    HttpMime 4.2.5提供了`MultipartEntity`和`MultiPartFormDatEntity`类,用于构建多部分/形式数据的HTTP实体,这些在进行Web服务调用或文件上传时非常有用。 将这三个库结合使用,开发者可以构建出强大且灵活的HTTP...

    httpclient-4.3.1相关jar包,整理下载

    httpmime-4.3.1.jar则专注于处理HTTP消息体中的MIME类型数据,比如上传文件、处理多部分表单数据等。这个组件扩展了HttpClient的能力,使其能方便地处理复杂的HTTP请求,如POST请求中包含文件或复杂表单数据的情况。...

    commons-codec-1.3.jar,commons-httpclient-3.1.jar,commons-logging-1.1.jar)

    在图片上传中,开发者可能利用HttpClient来发起POST请求,将图片数据作为请求体发送到服务器。 3. **commons-logging-1.1.jar**:这个JAR文件是Apache Commons Logging库的1.1版本。Logging库提供了一个接口层,...

    httpclient 上传文件

    System.out.println("文件上传失败,状态码:" + statusCode); } // 释放连接资源 postMethod.releaseConnection(); ``` 在这个例子中,我们创建了一个`PostMethod`,设置了上传文件的URL,并创建了一个`FilePart...

    httpclient和RestfuL风格上传下载文件

    综上所述,HTTPClient和RESTful风格的文件上传下载在Java分布式系统中具有广泛应用。通过HTTPClient实现HTTP请求,利用RESTful接口定义清晰的操作方式,可以构建高效、灵活的文件传输方案。同时,理解并遵循良好的...

    httpclient4.3.3

    - **多部分上传**:内置对 HTTP 多部分请求的支持,方便进行文件上传或其他复杂的数据提交。 4. **使用示例** 创建一个 GET 请求: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); ...

    httpClient上传文件

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

Global site tag (gtag.js) - Google Analytics