HttpClient通过Post上传文件
来源:互联网 发布:翦伯赞中国史纲要知乎 编辑:程序博客网 时间:2024/05/22 13:36
在之前一段的项目中,使用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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally { try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) { }}}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubHttpPostArgumentTest2 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上传文件
- HttpClient 通过Post 上传文件。
- HttpClient通过Post上传文件
- HttpClient通过Post上传文件
- HttpClient通过Post上传文件
- HttpClient通过Post上传文件
- HttpClient通过Post上传文件
- HttpClient通过Post上传文件
- httpClient通过post上传数据
- HttpClient通过post上传文件和提交参数
- HttpClient通过post上传文件和提交参数
- HttpClient通过post上传文件和提交参数
- 通过HttpClient上传文件
- HttpClient post 上传文件 笔记
- HttpClient post 上传文件 笔记
- HttpClient post 上传文件 笔记
- HttpClient用POST上传文件
- httpClient中post上传文件乱码
- VS2005调用MSRS2008问题
- 把专业医疗设备搬回家 ATLAS辅助康复系统演示(附视频)
- 要像管理咨询一样去做软件需求调研
- MinGW下简单编译FFmpeg
- 【不断更新中】MySql常用命令
- HttpClient通过Post上传文件
- Javascript 异步加载详解
- exceptional c++ item6-7 临时变量
- 配置hadoop 使用fair scheduler调度器
- Swing之拖动篇:将文本中的内容拖动到表中
- Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
- 无法读取项目文件 .csproj,请确认 <Import> 声明中的路径正确,且磁盘上存在该文件
- using backup controlfile 和 until cancel区别
- 安装11g RAC Clustware 前可以用命令进行检查所有条件是否满足