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

本文演示了如何使用Java的HttpClient库发送带有文件的HTTP POST请求。通过创建FileEntity对象并设置请求头,将文件作为请求实体发送。服务端使用Servlet接收文件并返回JSON响应。
摘要由CSDN通过智能技术生成

所需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

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+"\"}");

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值