HttpClient通过Post上传文件的实例代码

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

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

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

客户端代码:

import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.ParseException; 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.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; /** * * @author <a href="mailto:just_szl@hotmail.com"> Geray</a> * @version 1.0,2012-6-12 */ public class HttpPostArgumentTest2 { //file1与file2在同一个文件夹下 filepath是该文件夹指定的路径 public void SubmitPost(String url,String filename1,String filename2, String filepath){ HttpClient httpclient = new DefaultHttpClient(); try { HttpPost httppost = new HttpPost(url); FileBody bin = new FileBody(new File(filepath + File.separator + filename1)); FileBody bin2 = new FileBody(new File(filepath + File.separator + filename2)); StringBody comment = new StringBody(filename1); MultipartEntity reqEntity = new MultipartEntity(); reqEntity.addPart("file1", bin);//file1为请求后台的File upload;属性 reqEntity.addPart("file2", bin2);//file2为请求后台的File upload;属性 reqEntity.addPart("filename1", comment);//filename1为请求后台的普通参数;属性 httppost.setEntity(reqEntity); HttpResponse response = httpclient.execute(httppost); int statusCode = response.getStatusLine().getStatusCode(); if(statusCode == HttpStatus.SC_OK){ System.out.println("服务器正常响应....."); HttpEntity resEntity = response.getEntity(); System.out.println(EntityUtils.toString(resEntity));//httpclient自带的工具类读取返回数据 System.out.println(resEntity.getContent()); EntityUtils.consume(resEntity); } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) { } } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub HttpPostArgumentTest2 httpPostArgumentTest2 = new HttpPostArgumentTest2(); httpPostArgumentTest2.SubmitPost("http://127.0.0.1:8080/demo/receiveData.do", "test.xml","test.zip","D://test"); } }

服务端代码:

public void receiveData(HttpServletRequest request, HttpServletResponse response) throws AppException{ PrintWriter out = null; response.setContentType("text/html;charset=UTF-8"); Map map = new HashMap(); FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); File directory = null; List<FileItem> items = new ArrayList(); try { items = upload.parseRequest(request); // 得到所有的文件 Iterator<FileItem> it = items.iterator(); while (it.hasNext()) { FileItem fItem = (FileItem) it.next(); String fName = ""; Object fValue = null; if (fItem.isFormField()) { // 普通文本框的值 fName = fItem.getFieldName(); // fValue = fItem.getString(); fValue = fItem.getString("UTF-8"); map.put(fName, fValue); } else { // 获取上传文件的值 fName = fItem.getFieldName(); fValue = fItem.getInputStream(); map.put(fName, fValue); String name = fItem.getName(); if(name != null && !("".equals(name))) { name = name.substring(name.lastIndexOf(File.separator) + 1); // String stamp = StringUtils.getFormattedCurrDateNumberString(); String timestamp_Str = TimeUtils.getCurrYearYYYY(); directory = new File("d://test"); directory.mkdirs(); String filePath = ("d://test")+ timestamp_Str+ File.separator + name; map.put(fName + "FilePath", filePath); InputStream is = fItem.getInputStream(); FileOutputStream fos = new FileOutputStream(filePath); byte[] buffer = new byte[1024]; while (is.read(buffer) > 0) { fos.write(buffer, 0, buffer.length); } fos.flush(); fos.close(); map.put(fName + "FileName", name); } } } } catch (Exception e) { System.out.println("读取http请求属性值出错!"); // e.printStackTrace(); logger.error("读取http请求属性值出错"); } // 数据处理 try { out = response.getWriter(); out.print("{success:true, msg:'接收成功'}"); out.close(); } catch (IOException e) { e.printStackTrace(); } }

以上所述是小编给大家介绍的HttpClient通过Post上传文件的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-09-19 00:22:30

HttpClient通过Post上传文件的实例代码的相关文章

PHP中TP5 上传文件的实例详解

php 文件上传 效果图: 实现代码: application\index\controller\Index.php <?php namespace app\index\controller; use think\Controller; use think\Request; class Index extends Controller { //文件上传表单 public function index() { return $this->fetch(); } //文件上传提交 public fu

Android中使用七牛云存储进行图片上传下载的实例代码

Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储原理,上面这幅图片是官方给出的原理图,表述当然比较清晰了. 可以看出,要进行图片上传的话可以分为五大步: 1. 客户端用户登录到APP的账号系统里面: 2. 客户端上传文件之前,需要向业务服务器申请七牛的上传凭证,这个凭证由业务服务器使用七牛提供的服务端SDK生成: 3. 客户端使用七牛提供的客户端

php 生成自动创建文件夹并上传文件的示例代码

 本篇文章主要是对php生成自动创建文件夹并上传文件的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助    代码如下: <? session_start(); if($_SESSION['Company']=='') {  //exit(); } ?><?php //上传图片   $uptypes=array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','appli

HttpClient通过Post上传文件

在之前一段的项目中,使用Java模仿Http Post方式发送参数以及文件,单纯的传递参数或者文件可以使用URLConnection进行相应的处理.           但是项目中涉及到既要传递普通参数,也要传递多个文件(不是单纯的传递XML文件).在网上寻找之后,发现是使用HttClient来进行响应的操作,起初尝试多次依然不能传递参数和传递文件,后来发现时因为当使用HttpClient时,不能使用request.getParameter()对普通参数进行获取,而要在服务器端使用Upload来

php+iframe实现隐藏无刷新上传文件_php实例

首先ajax不能上传文件,这误导了我有段时间,今晚睡不着就照着说明做了个无刷新上传文件 其实原理很简单 复制代码 代码如下: <form enctype="multipart/form-data" method="POST" target="upload" action="http://localhost/class.upload.php" > <input type="file" nam

php 生成自动创建文件夹并上传文件的示例代码_php实例

复制代码 代码如下: <?session_start();if($_SESSION['Company']==''){ //exit();}?><?php //上传图片 $uptypes=array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','application/x-shockwave-flash','image/x-png'); $max_file_size=5000000; 

android 上传文件到服务器代码实例

android对于上传文件,还是很简单的,和java里面的上传都是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要一些content-type这些参数的配置!  如果这些都弄好了,上传就很简单了!   下面是我写的一个上传的工具类:复制代码 代码如下:package com.spring.sky.image.upload.network; import java.io.DataOutputStream;import java.io.File;import java.io.Fi

JS中INPUT上传文件类型限制代码

在客户端进行验证    代码如下 复制代码 <script   Language="JavaScript"   Type="text/javascript"> <!-- function   picForm_Validator(myform) { if(document.all.file1.value=="")         {                 alert("请选择上传的照片!");    

PHP上传文件示例程序代码(适合初学者)

创建一个文件上传表单 允许用户从表单上传文件是非常有用的. 请看下面这个供上传文件的 HTML 表单:  代码如下 复制代码 <html> <body> <form action="upload_file.php" method="post" enctype="multipart/form-data">  <label for="attach_file">Filename:<