在之前一段的项目中,使用Java模仿Http Post方式发送参数以及文件,单纯的传递参数或者文件可以使用URLConnection进行相应的处理。

但是项目中涉及到既要传递普通参数,也要传递多个文件(不是单纯的传递XML文件)。在网上寻找之后,发现是使用HttClient来进行响应的操作,起初尝试多次依然不能传递参数和传递文件,后来发现时因为当使用HttpClient时,不能使用request.getParameter()对普通参数进行获取,而要在服务器端使用Upload来进行操作。

HttpClient4.2 jar下载 :http://download.csdn.net/detail/just_szl/4370574

客户端代码:

  1. import java.io.ByteArrayOutputStream;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import org.apache.http.HttpEntity;
  6. import org.apache.http.HttpResponse;
  7. import org.apache.http.HttpStatus;
  8. import org.apache.http.ParseException;
  9. import org.apache.http.client.HttpClient;
  10. import org.apache.http.client.methods.HttpPost;
  11. import org.apache.http.entity.mime.MultipartEntity;
  12. import org.apache.http.entity.mime.content.FileBody;
  13. import org.apache.http.impl.client.DefaultHttpClient;
  14. import org.apache.http.util.EntityUtils;
  15. /**
  16. *
  17. * @author <a href="mailto:just_szl@hotmail.com"> Geray</a>
  18. * @version 1.0,2012-6-12
  19. */
  20. public class HttpPostArgumentTest2 {
  21. //file1与file2在同一个文件夹下 filepath是该文件夹指定的路径
  22. public void SubmitPost(String url,String filename1,String filename2, String filepath){
  23. HttpClient httpclient = new DefaultHttpClient();
  24. try {
  25. HttpPost httppost = new HttpPost(url);
  26. FileBody bin = new FileBody(new File(filepath + File.separator + filename1));
  27. FileBody bin2 = new FileBody(new File(filepath + File.separator + filename2));
  28. StringBody comment = new StringBody(filename1);
  29. MultipartEntity reqEntity = new MultipartEntity();
  30. reqEntity.addPart("file1", bin);//file1为请求后台的File upload;属性
  31. reqEntity.addPart("file2", bin2);//file2为请求后台的File upload;属性
  32. reqEntity.addPart("filename1", comment);//filename1为请求后台的普通参数;属性
  33. httppost.setEntity(reqEntity);
  34. HttpResponse response = httpclient.execute(httppost);
  35. int statusCode = response.getStatusLine().getStatusCode();
  36. if(statusCode == HttpStatus.SC_OK){
  37. System.out.println("服务器正常响应.....");
  38. HttpEntity resEntity = response.getEntity();
  39. System.out.println(EntityUtils.toString(resEntity));//httpclient自带的工具类读取返回数据
  40. System.out.println(resEntity.getContent());
  41. EntityUtils.consume(resEntity);
  42. }
  43. } catch (ParseException e) {
  44. // TODO Auto-generated catch block
  45. e.printStackTrace();
  46. } catch (IOException e) {
  47. // TODO Auto-generated catch block
  48. e.printStackTrace();
  49. } finally {
  50. try {
  51. httpclient.getConnectionManager().shutdown();
  52. } catch (Exception ignore) {
  53. }
  54. }
  55. }
  56. /**
  57. * @param args
  58. */
  59. public static void main(String[] args) {
  60. // TODO Auto-generated method stub
  61. HttpPostArgumentTest2 httpPostArgumentTest2 = new HttpPostArgumentTest2();
  62. httpPostArgumentTest2.SubmitPost("http://127.0.0.1:8080/demo/receiveData.do",
  63. "test.xml","test.zip","D://test");
  64. }
  65. }

服务端代码:

  1. public void receiveData(HttpServletRequest request, HttpServletResponse response) throws AppException{
  2. PrintWriter out = null;
  3. response.setContentType("text/html;charset=UTF-8");
  4. Map map = new HashMap();
  5. FileItemFactory factory = new DiskFileItemFactory();
  6. ServletFileUpload upload = new ServletFileUpload(factory);
  7. File directory = null;
  8. List<FileItem> items = new ArrayList();
  9. try {
  10. items = upload.parseRequest(request);
  11. // 得到所有的文件
  12. Iterator<FileItem> it = items.iterator();
  13. while (it.hasNext()) {
  14. FileItem fItem = (FileItem) it.next();
  15. String fName = "";
  16. Object fValue = null;
  17. if (fItem.isFormField()) { // 普通文本框的值
  18. fName = fItem.getFieldName();
  19. //                  fValue = fItem.getString();
  20. fValue = fItem.getString("UTF-8");
  21. map.put(fName, fValue);
  22. } else { // 获取上传文件的值
  23. fName = fItem.getFieldName();
  24. fValue = fItem.getInputStream();
  25. map.put(fName, fValue);
  26. String name = fItem.getName();
  27. if(name != null && !("".equals(name))) {
  28. name = name.substring(name.lastIndexOf(File.separator) + 1);
  29. //                      String stamp = StringUtils.getFormattedCurrDateNumberString();
  30. String timestamp_Str = TimeUtils.getCurrYearYYYY();
  31. directory = new File("d://test");
  32. directory.mkdirs();
  33. String filePath = ("d://test")+ timestamp_Str+ File.separator + name;
  34. map.put(fName + "FilePath", filePath);
  35. InputStream is = fItem.getInputStream();
  36. FileOutputStream fos = new FileOutputStream(filePath);
  37. byte[] buffer = new byte[1024];
  38. while (is.read(buffer) > 0) {
  39. fos.write(buffer, 0, buffer.length);
  40. }
  41. fos.flush();
  42. fos.close();
  43. map.put(fName + "FileName", name);
  44. }
  45. }
  46. }
  47. } catch (Exception e) {
  48. System.out.println("读取http请求属性值出错!");
  49. //          e.printStackTrace();
  50. logger.error("读取http请求属性值出错");
  51. }
  52. // 数据处理
  53. try {
  54. out = response.getWriter();
  55. out.print("{success:true, msg:'接收成功'}");
  56. out.close();
  57. } catch (IOException e) {
  58. e.printStackTrace();
  59. }
  60. }

http://blog.csdn.net/Just_szl/article/details/7659347

HttpClient通过Post上传文件(转)的更多相关文章

  1. WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)

    简单的Demo,用于了解WebAPI如何同时接收文件及数据,同时提供HttpClient模拟如何同时上传文件和数据的Demo,下面是HttpClient上传的Demo界面 1.HttpClient部分 ...

  2. [转]httpclient 上传文件、下载文件

    用httpclient4.3 post方式推送文件到服务端  准备:httpclient-4.3.3.jar:httpcore-4.3.2.jar:httpmime-4.3.3.jar/** * 上传 ...

  3. 转 Android网络编程之使用HttpClient批量上传文件 MultipartEntityBuilder

    请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 http://www.tuicool.com/articles/Y7reYb 我曾在<Andr ...

  4. HttpClient MultipartEntityBuilder 上传文件

    文章转载自: http://blog.csdn.net/yan8024/article/details/46531901 http://www.51testing.com/html/56/n-3707 ...

  5. HttpClient 测试web API上传文件实例

    1.使用HttpClient 测试上传文件并且设置header信息: using Lemon.Common; using Newtonsoft.Json; using System; using Sy ...

  6. Java使用HttpClient上传文件

    Java可以使用HttpClient发送Http请求.上传文件等,非常的方便 Maven <dependency> <groupId>org.apache.httpcompon ...

  7. HttpClient上传文件

    1.上传客户端代码: public static void upload() { CloseableHttpClient httpclient = HttpClients.createDefault( ...

  8. 【httpclient-4.3.1.jar】httpclient发送get、post请求以及携带数据上传文件

    1.发送get.post携带参数以及post请求接受JSON数据: package cn.qlq.utils; import java.io.BufferedReader; import java.i ...

  9. .Net使用HttpClient以multipart/form-data形式post上传文件及其相关参数

    前言: 本次要讲的是使用.Net HttpClient拼接multipark/form-data形式post上传文件和相关参数,并接收到上传文件成功后返回过来的结果(图片地址,和是否成功).可能有很多 ...

随机推荐

  1. CoreAnimation-04-核心动画必备基础

    概述 简介 核心动画提供了一组非常强大的动画API,通过该组API可以高效的实现绝大部分绚丽的动画效果 注意事项 核心动画的操作在子线程中执行,不会阻塞主线程 核心动画直接作用与CALayer对象上, ...

  2. Effective Java 36 Consistently use the Override annotation

    Principle Use the Override annotation on every method declaration that you believe to override a sup ...

  3. 烂泥:KVM中安装Windows Server 2008 R2系统

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在前一篇文章中,我介绍了有关在KVM中的安装Centos系统.接下来,就来介绍如何在KVM中安装Windows系统. 注意:在此我安装的是windows ...

  4. JS高级程序设计2nd部分知识要点7

    例子: <!DOCTYPE html> <html lang="en"> <head>  <meta charset="UTF- ...

  5. Python pass语句作用与用法

    Python中的pass语句作用是什么?表示它不做任何事情,一般用做占位语句.pass语句具体作用及使用方法,我们往下看. pass语句在函数中的作用 当你在编写一个程序时,执行语句部分思路还没有完成 ...

  6. 将text 文件转为List

    Integer 类型 ArrayList<Integer> Mlist = new ArrayList<Integer>(); Scanner scM = new Scanne ...

  7. android使用微软雅黑字体

    android使用微软雅黑字体,需要下载字体 ttf文件 下载地址:http://download.csdn.net/detail/xiaoliu123586/9049815 放在assert,然后引 ...

  8. tomcat发布记录

    web项目发布详细步骤 服务器 tomcat服务器1.删除webapps文件夹里面的项目war包-->ifm.war(项目war名称)2.把项目的ifm.war放到webapps里面3.删除we ...

  9. DataGridView合并单元格

    昨天一个同事问我DataGridView单元格合并的问题,一开始按照我的设想是算出两个单元格的Rectangle,然后直接使用e.Graphics.FillRectangle(backColorBru ...

  10. Openstack-Ceilometer-SNMP的使用

    1. 物理服务器配置 1.1安装 #yum install -y net-snmp net-snmp-utils 1.2      配置 复制[附件]中snmpd.conf文件到/etc/snmp/目 ...