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-cloud Config Server的3种配置方式
Sep 25 Java/Android
Java设计模式之享元模式示例详解
Mar 03 Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 Java/Android
Spring Boot DevTools 全局配置学习指南
Mar 31 Java/Android
Java GUI编程菜单组件实例详解
Apr 07 Java/Android
零基础学java之方法的定义与调用详解
Apr 10 Java/Android
SpringCloud项目如何解决log4j2漏洞
Apr 10 Java/Android
Spring Boot配合PageHelper优化大表查询数据分页
Apr 20 Java/Android
Java 写一个简单的图书管理系统
Apr 26 Java/Android
Java 死锁解决方案
May 11 Java/Android
Java界面编程实现界面跳转
Jun 16 Java/Android
阿里面试Nacos配置中心交互模型是push还是pull原理解析
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
PHP框架Laravel的小技巧两则
2015/02/10 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
python网络编程学习笔记(一)
2014/06/09 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
python获取当前用户的主目录路径方法(推荐)
2017/01/12 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
Python代码需要缩进吗
2020/07/01 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
工厂实习感言
2014/01/14 职场文书
护理工作感言
2014/01/16 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
作风建设演讲稿
2014/05/23 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
党支部审查意见
2015/06/02 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
python之django路由和视图案例教程
2021/07/26 Python