使用HttpClient携带文件发送请求简单实例

所需jar包:

 commons-codec-1.6.jar
commons-io-1.2.jar
commons-logging-1.1.3.jar
fluent-hc-4.3.3.jar
httpclient-4.3.3.jar
httpclient-cache-4.3.3.jar
httpcore-4.3.2.jar
httpmime-4.3.3.jar

点击下载jar包: httpcomponents-client-4.3.3-bin.tar.gz  
       官网地址:http://hc.apache.org/httpclient-3.x/

 

HttpClient请求

 

package com.servser;

import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;

import net.sf.json.JSONObject;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.FileEntity;
import org.apache.http.impl.client.DefaultHttpClient;

public class ClientTest {

public static void main(String[] args) throws Exception {	
		
	String filePath = "";
	String servletPath = "";
	//本地影像地址
	filePath = "d:/img/000000000163887-2.jpg";
	//连接服务端地址参数直接在地址后加上
servletPath = "http://192.168.1.226:8080/ServletDemo/ServletTest?test1=test";

	File file = new File(filePath);
	FileEntity fileEntity = new FileEntity(file, "text/plain;charset=gbk");
	HttpPost httpPost = new HttpPost(servletPath);
	httpPost.setHeader("Content-Type","text/xml;charset=gbk");
	httpPost.setEntity(fileEntity); //set影像
	System.out.println(httpPost);
	
	HttpClient httpclient = new DefaultHttpClient();
	//发送请求
	HttpResponse response = httpclient.execute(httpPost); 
	HttpEntity entity = response.getEntity();
	
	if (entity != null) {
		//返参
		InputStream instream = entity.getContent();
		//转换为String
		String str = IOUtils.toString(new InputStreamReader(instream));
		//因为本实例发送的json格式需要进行解析
		JSONObject obj = JSONObject.fromObject(str) ; 
		System.out.println(obj.get("imageKey"));
		System.out.println(obj.get("flag"));
		System.out.println(obj.get("detail"));
		IOUtils.closeQuietly(instream);
		//System.out.println(new String(str.getBytes("utf-8")));
	}
}

}


	解析Json格式所需JSON-lib jar包
	commons-beanutils-1.8.0.jar
	commons-collections-3.2.jar
	commons-lang-2.4.jar
	commons-logging-1.0.4.jar
	ezmorph-1.0.4.jar
	json-lib-2.2.3-jdk15.jar 

服务端(使用的是servlet)

 

package com.servlet;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;

/**
 * Servlet implementation class ServletTest
 */
@WebServlet("/ServletTest")
public class ServletTest extends HttpServlet {
private static final long serialVersionUID = 1L;
   
/**
 * @see HttpServlet#HttpServlet()
 */
public ServletTest() {
	super();
	// TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, 
 HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, 
	HttpServletResponse response) throws ServletException, IOException {
	doPost(request,response);
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, 
 HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, 
	HttpServletResponse response) throws ServletException, IOException {
	response.setCharacterEncoding("utf-8"); //解决中文乱码问题
	System.out.println(request.getParameter("test1")); //接参
	String imageKey = "3313"; //设置反参
	String flag = "N";//设置反参
	String detail = "不清晰";//设置反参
	
	//这个是返回简单字符串方式,示例使用的是返回json格式
	//response.getWriter().print(detail);
	
	//把接收过来的影像转换为byte数组
	byte [] bfile = IOUtils.toByteArray(request.getInputStream());
		BufferedOutputStream bos = null;  
		FileOutputStream fos = null;  
		File file = null;  
		try {  
		   // File dir = new File("d:/");  
		 /*if(!dir.exists()&&dir.isDirectory()){//判断文件目录是否存在  
				dir.mkdirs();  
			}*/  
			file = new File("d:/img.jpg");   
			fos = new FileOutputStream(file);  
			bos = new BufferedOutputStream(fos);  
			bos.write(bfile);  //把接收到的影像保存到磁盘
		} catch (Exception e) {  
			e.printStackTrace();  
		} finally {  
			if (bos != null) {  
				try {  
					bos.close();  
				} catch (IOException e1) {  
					e1.printStackTrace();  
				}  
			}  
			if (fos != null) {  
				try {  
					fos.close();  
				} catch (IOException e1) {  
					e1.printStackTrace();  
				}  
			}  
		}  
	
	//返回参数,使用拼接json格式
	response.getWriter().print("{\"imageKey\":\""+imageKey
		+"\",\"flag\":\""+flag+"\",\"detail\":\""+detail+"\"}");
}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值