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 相关文章推荐
IDEA使用SpringAssistant插件创建SpringCloud项目
Jun 23 Java/Android
Java elasticsearch安装以及部署教程
Jun 28 Java/Android
jackson json序列化实现首字母大写,第二个字母需小写
Jun 29 Java/Android
如何给HttpServletRequest增加消息头
Jun 30 Java/Android
浅谈spring boot使用thymeleaf版本的问题
Aug 04 Java/Android
java多态注意项小结
Oct 16 Java/Android
OpenCV实现普通阈值
Nov 17 Java/Android
SpringDataJPA在Entity中常用的注解介绍
Dec 06 Java/Android
mybatis-plus模糊查询指定字段
Apr 28 Java/Android
MyBatis核心源码深度剖析SQL语句执行过程
May 20 Java/Android
Java异常体系非正常停止和分类
Jun 14 Java/Android
OpenFeign实现远程调用
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
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
DIV菜单层实现代码
2010/11/19 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
javascript实现计时器的简单方法
2016/02/21 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
node.js处理前端提交的GET请求
2019/08/30 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
vue实现滚动鼠标滚轮切换页面
2020/12/13 Vue.js
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
Python字典底层实现原理详解
2019/12/18 Python
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
Hammitt官网:设计师手袋
2020/05/23 全球购物
大学自我鉴定范文
2013/12/26 职场文书
公司活动策划方案
2014/01/13 职场文书
《春笋》教学反思
2014/04/15 职场文书
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
安全承诺书格式
2014/05/21 职场文书
国际商务专业求职信
2014/07/15 职场文书
学习保证书怎么写
2015/02/26 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
Pytorch中Softmax和LogSoftmax的使用详解
2021/06/05 Python
python中__slots__节约内存的具体做法
2021/07/04 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL