Java Post请求发送form-data表单参数详细示例代码

 更新时间:2025年07月05日 09:23:47   作者:胡德禄a  
POST请求是一种常见的网络通信操作,用于向服务器发送数据,这种请求通常用于上传文件或者提交包含大量数据的表单,这篇文章主要介绍了Java Post请求发送form-data表单参数的相关资料,需要的朋友可以参考下

Post请求发送form-data表单参数

一、pom文件引入依赖

        <!-- 添加 Apache HttpClient 依赖 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version> <!-- 请使用最新的稳定版本 -->
        </dependency>

        <!-- 如果你需要使用 MIME 相关的实用工具,添加 mime4j 依赖 -->
        <dependency>
            <groupId>org.apache.james</groupId>
            <artifactId>apache-mime4j</artifactId>
            <version>0.6.1</version> <!-- 请使用最新的稳定版本 -->
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.13</version> <!-- 请使用最新的版本号 -->
        </dependency>

二、工具类

package com.hn.bdzzhixun.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;

import javax.net.ssl.SSLContext;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;

/**
 * @author lzn
 * @version :1.0
 *  2024/11/22 15:10
 */
@Slf4j
public class SendFileUtils {

    /**
     * 使用multipart/form-data方式传输文件
     * 发送文件方法
     * @param url 接口地址
     * @param file 文件
     */
    public static String sendMultipartFile(String url, File file,String dwbh) {
        //获取HttpClient
        CloseableHttpClient client = getHttpClient();
        HttpPost httpPost = new HttpPost(url);
        fillMethod(httpPost,System.currentTimeMillis());

        // 请求参数配置
        RequestConfig requestConfig = RequestConfig
                .custom()
                .setSocketTimeout(60000)
                .setConnectTimeout(3000)
                .setConnectionRequestTimeout(3000)
                .build();
        httpPost.setConfig(requestConfig);
        String res = "";
        String fileName = file.getName();//文件名
        try {

            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.setCharset(StandardCharsets.UTF_8);
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

            /*
              假设有两个参数需要传输
              参数名:filaName 值 "文件名"
              参数名:file 值:file (该参数值为file对象)
             */
            //表单中普通参数
            builder.addPart("filaName ",new StringBody("来源", ContentType.create("text/plain", Consts.UTF_8)));

            // 表单中的文件参数 注意,builder.addBinaryBody的第一个参数要写参数名
            builder.addBinaryBody("file", file, ContentType.create("multipart/form-data",Consts.UTF_8), fileName);

            builder.addTextBody("positionId",dwbh);

            HttpEntity entity = builder.build();
            httpPost.setEntity(entity);
            HttpResponse response = client.execute(httpPost);// 执行提交

            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                // 返回响应结果
                res = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
            }else {
                res = "响应失败";
                log.error("响应失败!");
            }
            return res;

        } catch (Exception e) {
            e.printStackTrace();
            log.error("调用HttpPost失败!" + e);
        } finally {
            if (client != null) {
                try {
                    client.close();
                } catch (IOException e) {
                    log.error("关闭HttpPost连接失败!");
                }
            }
        }
        log.info("数据传输成功!!!!!!!!!!!!!!!!!!!!");
        return res;
    }

    /**
     * 获取HttpClient
     */
    private static CloseableHttpClient getHttpClient(){
        SSLContext sslContext;
        try {
            sslContext = new SSLContextBuilder().loadTrustMaterial(null, (TrustStrategy) (arg0, arg1) -> true).build();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext,
                NoopHostnameVerifier.INSTANCE);
        return HttpClientBuilder.create().setSSLSocketFactory(sslConnectionSocketFactory).build();
    }

    /**
     * 添加头文件信息
     */
    private static void fillMethod(HttpRequestBase requestBase, long timestamp){
        //此处为举例,需要添加哪些头部信息自行添加即可

        //设置时间戳,nginx,underscores_in_headers on;放到http配置里,否则nginx会忽略包含"_"的头信息
        requestBase.addHeader("timestamp",String.valueOf(timestamp));
        System.out.println(Arrays.toString(requestBase.getAllHeaders()));
    }
}


总结 

到此这篇关于Java Post请求发送form-data表单参数的文章就介绍到这了,更多相关Java Post请求发送form-data参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot 的 web 类型推断详解

    SpringBoot 的 web 类型推断详解

    这篇文章主要介绍了SpringBoot 的 web 类型推断详解的相关资料,需要的朋友可以参考下
    2022-12-12
  • Java String 和 new String()的比较与区别

    Java String 和 new String()的比较与区别

    这篇文章主要介绍了Java String 和 new String()的区别的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java使用Optional实现优雅避免空指针异常

    Java使用Optional实现优雅避免空指针异常

    空指针异常(NullPointerException)可以说是Java程序员最容易遇到的问题了。为了解决这个问题,Java 8 版本中推出了 Optional 类,本文就来讲讲如何使用Optional实现优雅避免空指针异常吧
    2023-03-03
  • Java编写程序之输入一个数字实现该数字阶乘的计算

    Java编写程序之输入一个数字实现该数字阶乘的计算

    这篇文章主要介绍了Java编写程序之输入一个数字实现该数字阶乘的计算,本文通过实例代码给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Nacos配置的多文件加载与共享配置方式

    Nacos配置的多文件加载与共享配置方式

    这篇文章主要介绍了Nacos配置的多文件加载与共享配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 如何使用Springfox Swagger实现API自动生成单元测试

    如何使用Springfox Swagger实现API自动生成单元测试

    Springfox是一个使用Java语言开发开源的API Doc的框架,它的前身是swagger-springmvc,可以将我们的Controller中的方法以文档的形式展现,这篇文章主要介绍了如何使用Springfox Swagger实现API自动生成单元测试,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • spring aop之@AfterReturning不生效问题及解决

    spring aop之@AfterReturning不生效问题及解决

    这篇文章主要介绍了spring aop之@AfterReturning不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java使用easypoi快速导入导出的实现

    Java使用easypoi快速导入导出的实现

    这篇文章主要介绍了实现Java使用easypoi快速导入导出的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • java WebSocket 服务端实现代码

    java WebSocket 服务端实现代码

    WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端,这篇文章主要介绍了java WebSocket 服务端代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • @Cacheable 拼接key的操作

    @Cacheable 拼接key的操作

    这篇文章主要介绍了@Cacheable 拼接key的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02

最新评论