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新手教程之ArrayList的基本使用
Jun 20 Java/Android
解决Swagger2返回map复杂结构不能解析的问题
Jul 02 Java/Android
JavaGUI模仿QQ聊天功能完整版
Jul 04 Java/Android
新手初学Java网络编程
Jul 07 Java/Android
Java使用jmeter进行压力测试
Jul 09 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 Java/Android
深入浅出讲解Java8函数式编程
Jan 18 Java/Android
Java练习之潜艇小游戏的实现
Mar 16 Java/Android
Java实战之课程信息管理系统的实现
Apr 01 Java/Android
Dubbo+zookeeper搭配分布式服务的过程详解
Apr 03 Java/Android
Spring Data JPA框架的核心概念和Repository接口
Apr 28 Java/Android
Android移动应用开发指南之六种布局详解
Sep 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
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
2020/01/21 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python切换pip安装源的方法详解
2016/11/18 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
python 利用栈和队列模拟递归的过程
2018/05/29 Python
Random 在 Python 中的使用方法
2018/08/09 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
Python中itertools的用法详解
2020/02/07 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
学生会竞选演讲稿
2014/04/24 职场文书
答谢会策划方案
2014/05/12 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
培养联系人考察意见
2015/06/01 职场文书
运动会通讯稿300字
2015/07/20 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL