HttpClient通过Post上传文件

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

在之前一段的项目中,使用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:[email protected]"> 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();  } }


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

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/gfdhjf/article/details/83538271
今日推荐