HttpClient通过Post上传文件
发布日期:2021-07-19 12:29:28
浏览次数:1
分类:技术文章
本文共 4837 字,大约阅读时间需要 16 分钟。
在之前一段的项目中,使用Java模仿Http Post方式发送参数以及文件,单纯的传递参数或者文件可以使用URLConnection进行相应的处理。
但是项目中涉及到既要传递普通参数,也要传递多个文件(不是单纯的传递XML文件)。在网上寻找之后,发现是使用HttClient来进行响应的操作,起初尝试多次依然不能传递参数和传递文件,后来发现时因为当使用HttpClient时,不能使用request.getParameter()对普通参数进行获取,而要在服务器端使用Upload来进行操作。
HttpClient4.2 jar下载 :
客户端代码:
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 Geray * @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; Listitems = new ArrayList(); try { items = upload.parseRequest(request); // 得到所有的文件 Iterator 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(); } }
转载地址:https://blog.csdn.net/jdsjlzx/article/details/8825724 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月27日 13时04分07秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
shell基础
2019-04-30
流程控制之for循环、select语句
2019-04-30
流程控制之if判断与case语句
2019-04-30
流程控制之while循环
2019-04-30
shell编程之变量
2019-04-30
shell编程之基本数据类型与值操作
2019-04-30
shell编程之元字符
2019-04-30
shell编程之grep
2019-04-30
shell编程之正则表达式详解
2019-04-30
shell编程之sed命令
2019-04-30
docker内存管理
2019-04-30
数据库介绍与数据库安装
2019-04-30
数据库基本命令--忘记密码、数据库的增删改查
2019-04-30
mysql关于库的详细操作
2019-04-30
mysql表相关操作
2019-04-30
mysql中表的数据类型
2019-04-30
mysql体系结构、服务组成、连接管理、多实例部署
2019-04-30
机智云程序移植到合泰单片机HT32F52352上
2019-04-30
好书推荐 ▏Android嵌入式系统开发项目教程
2019-04-30
基于机智云物联网技术的大棚喷药机
2019-04-30