HttpClient实现表单提交上传文件


Posted in Java/Android onAugust 14, 2022

本文实例为大家分享了HttpClient实现表单提交上传文件的具体代码,供大家参考,具体内容如下

需求:如何利用HttpClient,发起post请求,模拟表单提交,在后端上传文件?

上传文件接口:

/**
     * 文件上传测试接口
     * @return
     */
    @PostMapping("/upload")
    public Object uploadFileTest(@RequestParam("file") MultipartFile file, @RequestParam("file_name") String file_name, @RequestParam("file_code") String file_code) {
        System.out.println(file_name+","+file_code);
        return "OK";
    }

启动后,可以通过postman进行调用,最后打印OK,表示接口可以调用通

HttpClient实现表单提交上传文件

然后就是正式编码环节了

首先引入需要的包:

<dependency>
   <groupId>org.apache.httpcomponents</groupId>
   <artifactId>httpmime</artifactId>
   <version>4.5.3</version>
</dependency>

 编写main方法,直接发起调用

 public static String httpClientUploadFile(String url, File file) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";
        //每个post参数之间的分隔。随意设定,只要不会和其他的字符串重复即可。
        String boundary = "--------------4585696313564699";
        try {
            //文件名
            String fileName = file.getName();
            HttpPost httpPost = new HttpPost(url);
            //设置请求头
            httpPost.setHeader("Content-Type", "multipart/form-data; boundary="+boundary);
 
            //HttpEntity builder
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            //字符编码
            builder.setCharset(Charset.forName("UTF-8"));
            //模拟浏览器
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            builder.setContentType(ContentType.MULTIPART_FORM_DATA);
            //boundary
            builder.setBoundary(boundary);
            //multipart/form-data
            builder.addPart("file", new FileBody(file, ContentType.DEFAULT_BINARY));
            // binary
            //builder.addBinaryBody("name=\"file\"; filename=\"mysql.docx\"", new FileInputStream(file), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
            //其他参数
            //builder.addTextBody("file_name", fileName, ContentType.create("text/plain", Consts.UTF_8));
            builder.addTextBody("file_name", fileName, ContentType.MULTIPART_FORM_DATA);
            builder.addTextBody("file_code", "111111", ContentType.MULTIPART_FORM_DATA);
            //HttpEntity
            HttpEntity entity = builder.build();
            httpPost.setEntity(entity);
            // 执行提交
            HttpResponse response = httpClient.execute(httpPost);
            //响应
            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null) {
                // 将响应内容转换为字符串
                result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("result" + result);
        return result;
    }
 
    //main 方法
    public static void main(String[] args) {
        httpClientUploadFile("http://127.0.0.1:8080/test/tempA/upload",new File("e:/tmp/mysql.docx"));
    }

最后返回OK,调用成功

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
Java实战之用Swing实现通讯录管理系统
Jun 13 Java/Android
Spring Boot 排除某个类加载注入IOC的操作
Aug 02 Java/Android
MyBatis-Plus 批量插入数据的操作方法
Sep 25 Java/Android
Java 在生活中的 10 大应用
Nov 02 Java/Android
springboot新建项目pom.xml文件第一行报错的解决
Jan 18 Java/Android
使用HttpSessionListener监听器实战
Mar 17 Java/Android
JavaWeb实现显示mysql数据库数据
Mar 19 Java/Android
SpringBoot2零基础到精通之数据库专项精讲
Mar 22 Java/Android
Android 界面一键变灰 深色主题工具类
Apr 28 Java/Android
Java中Dijkstra(迪杰斯特拉)算法
May 20 Java/Android
Java处理延时任务的常用几种解决方案
Jun 01 Java/Android
java实现面板之间切换功能
Jun 10 Java/Android
HttpClient实现文件上传功能
Aug 14 #Java/Android
SpringBoot Http远程调用的方法
Aug 14 #Java/Android
基于Android10渲染Surface的创建过程
Aug 14 #Java/Android
OpenFeign实现远程调用
Aug 14 #Java/Android
httpclient调用远程接口的方法
Aug 14 #Java/Android
Java Spring读取和存储详细操作
Aug 05 #Java/Android
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
Aug 05 #Java/Android
You might like
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
PHP设置一边执行一边输出结果的代码
2013/09/30 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
取键盘键位ASCII码的网页
2007/07/30 Javascript
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
在Vue中使用echarts的方法
2018/02/05 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
PyCharm代码格式调整方法
2018/05/23 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
送给他或她的礼物:FUN.com
2018/08/17 全球购物
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
商务日语专业毕业生求职信
2013/10/26 职场文书
幼儿师范毕业生自荐信
2013/11/09 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书