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 11 Java/Android
浅谈什么是SpringBoot异常处理自动配置的原理
Jun 21 Java/Android
Spring Boot 启动、停止、重启、状态脚本
Jun 26 Java/Android
Maven学习----Maven安装与环境变量配置教程
Jun 29 Java/Android
Java反应式框架Reactor中的Mono和Flux
Jul 25 Java/Android
MyBatis自定义SQL拦截器示例详解
Oct 24 Java/Android
Java 实战项目之家居购物商城系统详解流程
Nov 11 Java/Android
Java并发编程之原子性-Atomic的使用
Mar 16 Java/Android
Spring Data JPA框架持久化存储数据到数据库
Apr 28 Java/Android
Jmerte 分布式压测及分布式压测配置
Apr 30 Java/Android
SpringBoot详解自定义Stater的应用
Jul 15 Java/Android
SpringBoot详解执行过程
Jul 15 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
关于手调机和数调机的选择
2021/03/02 无线电
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
python在控制台输出进度条的方法
2015/06/20 Python
python二分查找算法的递归实现方法
2016/05/12 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
使用python为mysql实现restful接口
2018/01/05 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
python实现二分查找算法
2020/09/18 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
公司领导推荐信
2013/11/12 职场文书
心理健康教育制度
2014/01/27 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
出纳岗位职责范本
2015/03/31 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL