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 相关文章推荐
MybatisPlus代码生成器的使用方法详解
Jun 13 Java/Android
详解Java实践之适配器模式
Jun 18 Java/Android
IDEA使用SpringAssistant插件创建SpringCloud项目
Jun 23 Java/Android
Java并发编程必备之Future机制
Jun 30 Java/Android
Spring Security中用JWT退出登录时遇到的坑
Oct 16 Java/Android
JVM的类加载器和双亲委派模式你了解吗
Mar 13 Java/Android
Java并发编程之原子性-Atomic的使用
Mar 16 Java/Android
详解Spring Security中的HttpBasic登录验证模式
Mar 17 Java/Android
零基础学java之带返回值的方法的定义和调用
Apr 10 Java/Android
Java对文件的读写操作方法
Apr 29 Java/Android
Java 轮询锁使用时遇到问题
May 11 Java/Android
HttpClient实现表单提交上传文件
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 伪造本地文件包含漏洞的代码
2011/11/03 PHP
PHP 第一节 php简介
2012/04/28 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
基于jquery的15款幻灯片插件
2011/04/10 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
常用的javascript设计模式
2017/01/11 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
药品促销活动方案
2014/02/14 职场文书
财务管理专业自荐书
2014/09/02 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
webpack的移动端适配方案小结
2021/07/25 Javascript
Python如何使用循环结构和分支结构
2022/04/13 Python