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实现斗地主之洗牌发牌
Jun 14 Java/Android
浅谈自定义校验注解ConstraintValidator
Jun 30 Java/Android
Java并发编程必备之Future机制
Jun 30 Java/Android
JUnit5常用注解的使用
Jul 02 Java/Android
Spring Boot 整合 Apache Dubbo的示例代码
Jul 04 Java/Android
SpringBoot整合RabbitMQ的5种模式实战
Aug 02 Java/Android
Java使用Unsafe类的示例详解
Sep 25 Java/Android
利用Sharding-Jdbc进行分库分表的操作代码
Jan 22 Java/Android
SpringBoot中使用Redis作为全局锁示例过程
Mar 24 Java/Android
Spring依赖注入多种类型数据的示例代码
Mar 31 Java/Android
详解Android中的TimePickerView(时间选择器)的用法
Apr 30 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
Jul 07 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怎样调用MSSQL的存储过程
2006/10/09 PHP
php Memcache 中实现消息队列
2009/11/24 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
php删除指定目录的方法
2015/04/03 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
python 快速排序代码
2009/11/23 Python
Python爬取读者并制作成PDF
2015/03/10 Python
python实用代码片段收集贴
2015/06/03 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
艺人经纪人岗位职责
2014/04/15 职场文书
社区矫正工作方案
2014/06/04 职场文书
七一党日活动总结
2014/07/08 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书