HttpClient通过HttpPost 进行数据传递

简介如何使用HttpClient进行HttpPost请求

下列是使用的jar请对应版本进行操作。
jar包描述

由于本人的项目这里使用的包比较多,这里是这四个包都需要修改,如果需要测试,只替换自己需要的包就可以

第一步-服务端推送

这里使用的使用的一部分代码,其中有些方法为保存或者判断中使用的,可以自行书写

   //图片转发流
    public static String postBuilder(String url, Map<String, Object> params) throws Throwable {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // result
        String result = "";
        File newfile = null;
        try {
            HttpPost httpPost = new HttpPost(url);
            // 设置请求和传输超时时间
//            RequestConfig requestConfig = RequestConfig.custom()
//                    .setConnectTimeout(10_000)
//                    .setConnectionRequestTimeout(10_000)
//                    .setSocketTimeout(10_000).build();
//            httpPost.setConfig(requestConfig);
            // headers.forEach((key, value) -> httpPost.setHeader(key, value));
            //构造请求体
            MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
            // 以浏览器兼容模式运行,防止文件名乱码。
            entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            // 设置二进制的方式上传文件addBinaryBody() 如果是表单 用addPart() 主要用哪一个看需求
            Record record = ResourceManager.getResource("xcxm", (String) params.get("fileId"));
            File file = ResourceManager.getFile(false, record);
            FileInputStream fis = new FileInputStream(file);
            byte[] bit = new byte[fis.available()];
            fis.read(bit);
            File file2 = new File(file.getPath() + "2021");
            FileOutputStream fos = new FileOutputStream(file2);
            fos.write(bit);
            fis.close();
            fos.close();
            //File file = new File("D:\\a1.png");
            //cn.crtech.cooperop.bus.util.GlobalVar.getSystemProperty("rm.path")
            if (!new File(GlobalVar.getSystemProperty("rm.tempfilepath")).exists()) {
                new File(GlobalVar.getSystemProperty("rm.tempfilepath")).mkdir();
            }
            //移动到临时表
             newfile = new File(GlobalVar.getSystemProperty("rm.tempfilepath") + "/" + record.get("file_name"));
            //服务器本地保存
            file.renameTo(newfile);
            file2.renameTo(file);
            entityBuilder.addBinaryBody("file", newfile);
            entityBuilder.addTextBody("fileId", params.get("fileId").toString());
            entityBuilder.addTextBody("userid", params.get("userid").toString());
            entityBuilder.addTextBody("gzid", params.get("gzid").toString());
            HttpEntity reqEntity = entityBuilder.setCharset(CharsetUtils.get("UTF-8")).build();
            httpPost.setEntity(reqEntity);
            // System.out.println("发起请求的页面地址 " + httpPost.getRequestLine());
            // 发起请求 并返回请求的响应
            CloseableHttpResponse response = httpClient.execute(httpPost);
            result = loadRtn(response);
//            try {
//                // 获取响应对象
//                HttpEntity resEntity = response.getEntity();
//                if (resEntity != null) {
//                    result = EntityUtils.toString(resEntity, Charset.forName("UTF-8"));
//                }
//                // 销毁
//                EntityUtils.consume(resEntity);
//            }catch(Exception e){
//                e.printStackTrace();
//            } finally {
//                if (response != null) {
//                    response.close();
//                }
//                if(newfile.exists()){
//                    newfile.delete();
//                }
//            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (httpClient != null) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (newfile.exists()) {
                newfile.delete();
            }
        }
        return result;
    }

第二步-客户端接收

//@WebServlet("/wxSgin")
public class wxuploadSgin extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        Map<String,Object> map = new HashMap<>();
        InputStream inputStream=null;
        try {
            List items = upload.parseRequest(request);
            Iterator iter = items.iterator();
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                if (item.isFormField()) {
                    //普通文本信息处理
                    String paramName = item.getFieldName();
                    String paramValue = item.getString();
                    System.out.println(paramName + ":" + paramValue);
                    map.put(paramName,paramValue);
                } else {
                    //上传文件信息处理
                    String fileName = item.getName();
                    inputStream=item.getInputStream();
                    map.put("item",item);
//                    byte[] data = item.get();
//                    String filePath = "D:\\a.png";
//                    FileOutputStream fos = new FileOutputStream(filePath);
//                    fos.write(data);
//                    fos.close();
                }
            }
            InterfaceService interfaceService=new InterfaceService();
            String file_cid="";
            try {
                 file_cid=interfaceService.wxuploadSsgin(map);
            } catch (Exception e) {
                e.printStackTrace();
            }

            response.setContentType("text/html; charset=UTF-8");
            Map<String,Object> rtn=new HashMap<>();
            rtn.put("file_cid",file_cid);
            response.getWriter().write(CommonFun.object2Json(file_cid));
            response.getWriter().flush();
            response.getWriter().close();



        } catch (FileUploadException e) {
            e.printStackTrace();
        }


    }

    public static String getBodyString(ServletRequest request) throws IOException {
        try(BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "utf-8"))) {
            String line = null;
            StringBuilder sb = new StringBuilder();
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            return sb.toString();
        }
    }
}

1.这里使用的是web.xml的形式来配置的,当然注解也是可以的。

<!--图片上传只是例子-->
  <servlet>
    <servlet-name>upload</servlet-name>
    <servlet-class>cn.xxx.cooperop.xxx.servlet.upload</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>upload</servlet-name>
    <url-pattern>/upload</url-pattern>
  </servlet-mapping>```

附链接:https://www.cnblogs.com/flying607/p/5748385.html

结尾

1.此文章本人调用HttpClient-HttpPost的笔记,如有错误请各位大佬指导改正
2.对于本人引用的链接和demo代码,如有遇到原始的希望告知,方便及时贴上其原帖
3.如果对上述的问题存在解答方法,欢迎在帖子下评论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值