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 26 Java/Android
总结Java对象被序列化的两种方法
Jun 30 Java/Android
Java使用httpRequest+Jsoup爬取红蓝球号码
Jul 02 Java/Android
mybatis3中@SelectProvider传递参数方式
Aug 04 Java/Android
Java网络编程之UDP实现原理解析
Sep 04 Java/Android
使用springMVC所需要的pom配置
Sep 15 Java/Android
SpringBoot中使用Redis作为全局锁示例过程
Mar 24 Java/Android
Spring事务管理下synchronized锁失效问题的解决方法
Mar 31 Java/Android
解决springboot druid数据库连接失败后一直重连的方法
Apr 19 Java/Android
Android存储中最基本的文件存储方式
Apr 30 Java/Android
JAVA springCloud项目搭建流程
May 11 Java/Android
Android移动应用开发指南之六种布局详解
Sep 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
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
laravel请求参数校验方法
2019/10/10 PHP
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
2017/08/21 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
2019/11/01 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
详解python中list的使用
2019/03/15 Python
详解python中的index函数用法
2019/08/06 Python
几个Shell Script面试题
2012/08/31 面试题
大学学风建设方案
2014/05/04 职场文书
倡议书范文格式
2014/05/12 职场文书
实验室的标语
2014/06/20 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
2014年村官工作总结
2014/11/24 职场文书
实习单位指导教师评语
2014/12/30 职场文书
安全保证书格式
2015/02/28 职场文书
英语辞职信范文
2015/02/28 职场文书
保送生自荐信范文
2015/03/26 职场文书
社区服务活动感想
2015/08/11 职场文书
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL