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 18 Java/Android
探讨Java中的深浅拷贝问题
Jun 26 Java/Android
Java生成读取条形码和二维码的简单示例
Jul 09 Java/Android
java设计模式--七大原则详解
Jul 21 Java/Android
SpringBoot实现quartz定时任务可视化管理功能
Aug 30 Java/Android
springboot中rabbitmq实现消息可靠性机制详解
Sep 25 Java/Android
Spring Security中用JWT退出登录时遇到的坑
Oct 16 Java/Android
Java字符串逆序方法详情
Mar 21 Java/Android
Java十分钟精通进阶适配器模式
Apr 06 Java/Android
零基础学java之带返回值的方法的定义和调用
Apr 10 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 Java/Android
Java对文件的读写操作方法
Apr 29 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
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
Python translator使用实例
2008/09/06 Python
python3编写C/S网络程序实例教程
2014/08/25 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
python基于TCP实现的文件下载器功能案例
2019/12/10 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
幼儿园大班新学期寄语
2014/01/18 职场文书
人事文员岗位职责
2015/02/04 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
消防安全月活动总结
2015/05/08 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL
详解Python requests模块
2021/06/21 Python