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中bean的生命周期之getSingleton方法
Jun 30 Java/Android
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
Jul 16 Java/Android
简述Java中throw-throws异常抛出
Aug 07 Java/Android
Java Spring 控制反转(IOC)容器详解
Oct 05 Java/Android
java多态注意项小结
Oct 16 Java/Android
SpringBoot中HttpSessionListener的简单使用方式
Mar 17 Java/Android
详解Flutter和Dart取消Future的三种方法
Apr 07 Java/Android
mybatis 获取更新记录的id
May 20 Java/Android
Springboot中如何自动转JSON输出
Jun 16 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
Jul 07 Java/Android
java实现web实时消息推送的七种方案
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
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
php 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
php继承的一个应用
2011/09/06 PHP
使用Composer安装Yii框架的方法
2016/03/15 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
2017/06/17 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python操作MongoDB详解及实例
2017/05/18 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
python使用pip安装SciPy、SymPy、matplotlib教程
2019/11/20 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
运动会广播稿200米(5篇)
2014/10/15 职场文书
2015年保管员工作总结
2015/04/30 职场文书
对讲机知识
2022/04/07 无线电