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
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
Jun 21 Java/Android
如何解决springcloud feign 首次调用100%失败的问题
Jun 23 Java/Android
HashMap实现保存两个key相同的数据
Jun 30 Java/Android
使用@Value值注入及配置文件组件扫描
Jul 09 Java/Android
用Java实现简单计算器功能
Jul 21 Java/Android
spring cloud 配置中心客户端启动遇到的问题
Sep 25 Java/Android
Spring事务管理下synchronized锁失效问题的解决方法
Mar 31 Java/Android
Spring Boot项目传参校验的最佳实践指南
Apr 05 Java/Android
SpringBoot中获取profile的方法详解
Apr 08 Java/Android
Java中Dijkstra(迪杰斯特拉)算法
May 20 Java/Android
java实现面板之间切换功能
Jun 10 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中全局变量global的使用演示代码
2011/05/18 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
前端jquery部分很精彩
2016/05/03 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
2019/05/20 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
Python实现partial改变方法默认参数
2014/08/18 Python
Python如何实现文本转语音
2016/08/08 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
python paramiko模块学习分享
2017/08/23 Python
python字符串的方法与操作大全
2018/01/30 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
Python中的asyncio代码详解
2019/06/10 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
使用python+whoosh实现全文检索
2019/12/09 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书