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泛型通配符详解
Jul 25 Java/Android
利用Sharding-Jdbc进行分库分表的操作代码
Jan 22 Java/Android
springboot+zookeeper实现分布式锁
Mar 21 Java/Android
Java字符串逆序方法详情
Mar 21 Java/Android
SpringBoot2零基础到精通之异常处理与web原生组件注入
Mar 22 Java/Android
Android Studio 计算器开发
May 20 Java/Android
Java实现带图形界面的聊天程序
Jun 10 Java/Android
Java+swing实现抖音上的表白程序详解
Jun 25 Java/Android
Android RecyclerView实现九宫格效果
Jun 28 Java/Android
java中如何截取字符串最后一位
Jul 07 Java/Android
MyBatis XPathParser解析器使用范例详解
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
获取PHP警告错误信息的解决方法
2013/06/03 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
jQuery 使用手册(四)
2009/09/23 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
python实现批量监控网站
2016/09/09 Python
python matplotlib画图实例代码分享
2017/12/27 Python
Python并行分布式框架Celery详解
2018/10/15 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
大学生学雷锋活动总结
2014/06/26 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
七个Python必备的GUI库
2021/04/27 Python
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB