`
wanghlwin
  • 浏览: 37718 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HttpClient4 的使用(post上传文件)struts action 接收

阅读更多

httpclient 4.1 很好的支持了 上传file的功能,下面来看一下具体的代码实现。

 

package com.whl.httpclient;

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 ClientMultipartFormPost {

	public static void main(String[] args) throws ClientProtocolException, IOException {
        
	  HttpClient httpclient = new DefaultHttpClient();
		
	  try {
		    HttpPost httppost = new HttpPost("http://localhost:8080/table!uploadFile");
		
		    FileBody bin = new FileBody(new File("d:/whlwhlwhl.txt"));
		    
		    StringBody comment = new StringBody("just test");
		
		    MultipartEntity reqEntity = new MultipartEntity();
		   
		    reqEntity.addPart("upload", bin);//upload为请求后台的File upload;属性
		    
		    reqEntity.addPart("str", comment);//str 为请求后台的String str;属性
		
		    httppost.setEntity(reqEntity);
		
		    HttpResponse response = httpclient.execute(httppost);
		    
		    int statusCode = response.getStatusLine().getStatusCode();
		    
		    if(statusCode == HttpStatus.SC_OK){
		    	
		    	HttpEntity resEntity = response.getEntity();
		    	
		    	System.out.println(EntityUtils.toString(resEntity));//httpclient自带的工具类读取返回数据
		    
		    	EntityUtils.consume(resEntity);

		    }
		    
		} finally {
		    try { 
		    	httpclient.getConnectionManager().shutdown(); 
		    } catch (Exception ignore) {
		    	
		    }
		}
	}
}

 

不过如果遇到上传的文件名是中文的名字的话,该如何解决呢?

 

求解答?

 

 

 

 

分享到:
评论
3 楼 wanghlwin 2012-11-20  
sunny243788557 写道
可以设置编码,处理中文,手动编码或用Struts2的字符过滤器都可以

我尝试过编码转换,但是将文件名转换后,程序就报找不到对应的文件错误。
请高手给个代码片段举例说明,多谢。
2 楼 sunny243788557 2012-11-20  
需要注意的是,如果参数中含有中文,需将参数进行URLEncoding处理,如:

1.String param = "param1=" + URLEncoder.encode("中国", "UTF-8") + "&param2=value2";
2.URI uri = URIUtils.createURI("http", "localhost", 8080,
3."/sshsky/index.html", param, null);
4.System.out.println(uri);
上例的打印结果如下:
http://localhost/index.html?param1=中国&param2=value2
1 楼 sunny243788557 2012-11-20  
可以设置编码,处理中文,手动编码或用Struts2的字符过滤器都可以

相关推荐

    struts2 android httpclient 上传文件

    首先,你需要在Struts2配置文件中启用文件上传,然后创建一个Action类,该类包含一个`java.io.File`或`org.apache.struts2.dispatcher.multipart.FileItem`类型的属性来接收上传的文件。在Action中处理文件,比如...

    HttpClient基本功能使用(结合Struts2传参)

    HttpClient可以帮助我们在后台模拟用户请求,与Struts2 Action进行交互,以便测试或实现服务间通信。 在使用HttpClient时,我们需要创建一个`CloseableHttpClient`实例,然后使用`HttpPost`或`HttpGet`对象来构建...

    java多文件上传

    在Struts中实现文件上传,你需要配置struts.xml文件,定义一个表单bean来接收文件字段,并在Action类中处理上传请求。Struts提供了`org.apache.struts.action.ActionForm`和`org.apache.struts.upload.FormFile`类来...

    Android文件上传.rar

    4. **使用MultipartEntity或RequestBody**:对于包含文件的数据,我们通常使用MultipartEntity(如果你使用的是Apache HttpClient)或RequestBody(如果你使用OkHttp)。在MultipartEntity或RequestBody中,我们可以...

    基於HttpClient和HtmlParser的簡單查詢系統(源碼)

    1. **控制器层**:Struts的Action类作为请求处理的核心,接收来自HttpClient的HTTP请求,调用相应的业务逻辑,然后将结果返回给客户端。通过配置Struts配置文件,可以定义多个Action,对应不同的查询操作。 2. **...

    android调用struts2源码

    2. **发起HTTP请求**:使用选择的网络请求库,设置请求方法(GET或POST),URL(指向Struts2 Action的URL),以及请求头(如Content-Type: application/json)。 3. **发送JSON数据**:如果使用POST请求,将JSON...

    android上传照片到服务器

    在Action类中定义方法,接收并处理上传的文件。 - 使用`CommonsFileUpload`库解析请求中的文件,将文件保存到服务器。 7. **客户端响应处理**: - 客户端需要监听网络请求的响应,判断上传是否成功。如果成功,...

    struts2ToJson

    4. **Android网络请求**:在Android中,与服务器进行网络通信通常使用`HttpURLConnection`、`HttpClient`(已废弃)、`Volley`、`Retrofit`或`OkHttp`等网络库。这些库可以帮助我们发送GET或POST请求,接收服务器...

    android客户端与服务器端的搭建.ppt

    在Action类中,为了让Struts2能够访问到HttpServletRequest和HttpServletResponse对象,Action类需要实现ServletRequestAware和ServletResponseAware接口,并覆写对应的setter方法。 接下来,我们转向Android客户端...

    android客户端与后台服务器交互

    服务器接收到请求后,通过Struts框架的Action类处理,使用Hibernate查询数据库验证信息。如果验证成功,服务器将生成一个包含会话ID的JSON响应,返回给客户端。客户端保存会话ID以进行后续的无状态请求。 在项目中...

    常用的jar包

    在IT行业中,jar(Java Archive)包是Java编程语言中的一种归档格式,用于收集多个类文件、相关的元数据和资源文件,以便于分发和使用。这些jar包在标题中提到的“常用的jar包”是指在开发Java应用程序时经常用到的...

    java工作总结

    - 使用`HttpClient`配合`HttpPost`或`HttpGet`发送请求。 - 处理JSON数据时,可以使用`JsonObject`类。 3. **页面跳转** - 前端跳转:使用`window.location.href`或`document.location`。 - 后台跳转:通过`...

    用Android搭建客户端_手机和服务器交互开发实例

    ### 使用Android搭建客户端_手机和服务器交互开发实例 #### 概述 本文旨在详细介绍如何使用Android平台搭建客户端,实现手机与服务器之间的数据交互。重点介绍采用SSH(Spring、Struts2、Hibernate)框架进行...

    Json依赖包

    4. **Struts框架与JSON** - 在Struts2框架中,可以配置Action支持JSON输出,使得HTTP响应可以直接返回JSON数据,这对于AJAX请求特别有用。只需在Action配置中添加`@Result(type="json")`注解即可。 5. **JSON与...

Global site tag (gtag.js) - Google Analytics