HttpClient实现表单提交上传文件

本文实例为大家分享了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,表示接口可以调用通

然后就是正式编码环节了

首先引入需要的包:

<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,调用成功

推荐阅读

    为什么WPS表单总是不打开

    为什么WPS表单总是不打开,,为什么WPS表格总是打不开??百度知道为您找到了6条优质回答span>a,type:cluster">很有可能文件已经损坏。恢复

    laravel-admin|自定义表单与验证

    laravel-admin|自定义表单与验证,表单,场景,场景:很多时候,由于我们业务场景比较特殊,需要自定义表单,然后框架给我提供了对应表单组建!案列:以

    Vue中如何实现表单验证

    Vue中如何实现表单验证,验证,表单验证,表单,用户名,元素,指令,随着web应用的不断发展,表单验证逐渐成为web开发过程中不可或缺的一部分。在Vue中

    vue如何实现上传文件功能(两种方案)

    vue如何实现上传文件功能(两种方案),组件,上传文件,请求,第三方,方案,上传,Vue是一种非常流行的前端开发框架,它提供了很多丰富的组件和工具来加速

    HTML中让表单input不可编辑的方法

    HTML中让表单input不可编辑的方法,方法,中国,表单,修改,字段,用户,  HTML中让表单input不可编辑的方法,有时候,我们希望表单中的文本框是只读的

    js验证表单

    js验证表单,表单,函数,本文目录js验证表单js表单验证中的邮箱验证怎么写代码js表单验证用JS提交表单时如何验证表单项关于JS表单验证js怎