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 将PPT幻灯片转为HTML文件的实现思路
Jun 11 Java/Android
Java中常用解析工具jackson及fastjson的使用
Jun 28 Java/Android
Spring Boot 整合 Apache Dubbo的示例代码
Jul 04 Java/Android
SpringCloud之@FeignClient()注解的使用方式
Sep 25 Java/Android
OpenCV实现普通阈值
Nov 17 Java/Android
Android超详细讲解组件ScrollView的使用
Mar 31 Java/Android
mybatis-plus模糊查询指定字段
Apr 28 Java/Android
Android 界面一键变灰 深色主题工具类
Apr 28 Java/Android
Springboot-cli 开发脚手架,权限认证,附demo演示
Apr 28 Java/Android
Java Spring Boot请求方式与请求映射过程分析
Jun 25 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
Jul 07 Java/Android
Spring Boot 的创建和运行示例代码详解
Jul 23 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
zend framework配置操作数据库实例分析
2012/12/06 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
php制作文本式留言板
2015/03/18 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
python生成指定尺寸缩略图的示例
2014/05/07 Python
python实现用户答题功能
2018/01/17 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
深入理解Python异常处理的哲学
2019/02/01 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
Python实现数字的格式化输出
2020/08/01 Python
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
幼儿园教师工作制度
2014/01/22 职场文书
中专毕业生个人职业生涯规划
2014/02/19 职场文书
运动会口号16字
2014/06/07 职场文书
党员评议自我评价
2015/03/03 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python