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 相关文章推荐
Spring Data JPA使用JPQL与原生SQL进行查询的操作
Jun 15 Java/Android
java Nio使用NioSocket客户端与服务端交互实现方式
Jun 15 Java/Android
如何解决springcloud feign 首次调用100%失败的问题
Jun 23 Java/Android
用Java实现简单计算器功能
Jul 21 Java/Android
Netty分布式客户端处理接入事件handle源码解析
Mar 25 Java/Android
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
Apr 24 Java/Android
JAVA springCloud项目搭建流程
May 11 Java/Android
Java实现添加条码或二维码到Word文档
Jun 01 Java/Android
Android学习之BottomSheetDialog组件的使用
Jun 21 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
Jun 21 Java/Android
SpringBoot Http远程调用的方法
Aug 14 Java/Android
Springboot集成kafka高级应用实战分享
Aug 14 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 向访客和爬虫显示不同的内容
2009/11/09 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
jQuery中noconflict函数的实现原理分解
2015/02/03 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
浅谈js中的bind
2019/03/18 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
python命令 -u参数用法解析
2019/10/24 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
美国在线家装零售商:Build.com
2016/09/02 全球购物
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
教育局长自荐信范文
2013/12/22 职场文书
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
毕业生欢送会主持词
2014/03/31 职场文书
妇女干部培训方案
2014/05/12 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
小学生校园广播稿
2014/09/28 职场文书
人事任命通知
2015/04/20 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
项目备案申请报告
2015/05/15 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
大学生团支书竞选稿
2015/11/21 职场文书