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 相关文章推荐
手把手教你用SpringBoot将文件打包成zip存放或导出
Jun 11 Java/Android
MybatisPlus代码生成器的使用方法详解
Jun 13 Java/Android
解决Maven项目中 Invalid bound statement 无效的绑定问题
Jun 15 Java/Android
SpringBoot集成Redis,并自定义对象序列化操作
Jun 22 Java/Android
分析ZooKeeper分布式锁的实现
Jun 30 Java/Android
JavaWeb 入门:Hello Servlet
Jul 16 Java/Android
java项目构建Gradle的使用教程
Mar 24 Java/Android
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
Apr 19 Java/Android
Android开发实现极为简单的QQ登录页面
Apr 24 Java/Android
springboot集成redis存对象乱码的问题及解决
Jun 16 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
Jun 21 Java/Android
tree shaking对打包体积优化及作用
Jul 07 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
php过滤XSS攻击的函数
2013/11/12 PHP
PHP制作万年历
2015/01/07 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
Jquery中&quot;$(document).ready(function(){ })&quot;函数的使用详解
2013/12/30 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
node.js实现端口转发
2016/04/14 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
python爬虫实现获取下一页代码
2020/03/13 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
高中生家长会演讲稿
2014/01/14 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
黄河象教学反思
2014/02/10 职场文书
《小儿垂钓》教学反思
2014/02/23 职场文书
简单的项目建议书模板
2014/03/12 职场文书
中学生打架检讨书
2014/10/13 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers
js不常见操作运算符总结
2021/11/20 Javascript
Python+DeOldify实现老照片上色功能
2022/06/21 Python