java发送post请求使用multipart/form-data格式文件数据到接口代码示例

 更新时间:2024年12月21日 14:17:06   作者:花鼠大师  
这篇文章主要介绍了java发送post请求使用multipart/form-data格式文件数据到接口的相关资料,文中指定了数据编码格式为UTF-8,并强调了所需依赖工具类,需要的朋友可以参考下

接口传输协议:HTTP
接口请求方式:POST
数据编码格式:UTF-8
数据传输格式:multipart/form-data

需求:使用multipart/form-data格式传输文件到给定接口。

工具类:

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.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 *
 * @author 花鼠大师
 * @version :1.0
 * @date 2024/4/12 15:10
 */
@Slf4j
public class SendFileUtils {

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

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

            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.setCharset(java.nio.charset.Charset.forName("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);

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

            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                // 返回响应结果
                res = EntityUtils.toString(response.getEntity(), java.nio.charset.Charset.forName("UTF-8"));
            }else {
                res = "响应失败";
                log.error("响应失败!");
            }
            return res;

        } catch (Exception e) {
            e.printStackTrace();
            log.error("调用HttpPost失败!" + e.toString());
        } finally {
            if (client != null) {
                try {
                    client.close();
                } catch (IOException e) {
                    log.error("关闭HttpPost连接失败!");
                }
            }
        }
        log.info("数据传输成功!!!!!!!!!!!!!!!!!!!!");
        return res;
    }
    /**
     * 获取HttpClient
     * @return
     */
    private static CloseableHttpClient getHttpClient(){
        SSLContext sslContext = null;
        try {
            sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
           
                public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
                    return true;
                }
            }).build();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext,
                NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient client = HttpClientBuilder.create().setSSLSocketFactory(sslConnectionSocketFactory).build();
        return client;
    }

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

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

所需依赖:

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

总结 

到此这篇关于java发送post请求使用multipart/form-data格式文件数据到接口的文章就介绍到这了,更多相关java发送post请求文件数据到接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java可以作为第一门编程语言学习吗

    java可以作为第一门编程语言学习吗

    在本篇内容里小编给JAVA零基础的网友分享一篇关于java可以作为第一门编程语言学习吗的文章,有兴趣的朋友们可以参考下。
    2020-11-11
  • Java 给图片和动图添加水印的方法

    Java 给图片和动图添加水印的方法

    本篇文章主要介绍了Java 给图片和动图添加水印的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 基于JavaMail的常用类详细介绍

    基于JavaMail的常用类详细介绍

    以下是对JavaMail的常用类进行了详细分析的介绍,需要的朋友可以过来参考下
    2013-09-09
  • 在编码时如何使用\r与\n,两者的区别

    在编码时如何使用\r与\n,两者的区别

    本篇文章是对\r与\n两者的区别,以及编程语言中如何使用进行了详细的分析介绍,需要的朋友可以参考下
    2015-07-07
  • Java中4种校验注解详解(值校验、范围校验、长度校验、格式校验)

    Java中4种校验注解详解(值校验、范围校验、长度校验、格式校验)

    这篇文章主要给大家介绍了关于Java中4种校验注解详解的相关资料,分别包括值校验、范围校验、长度校验、格式校验等,Java注解(Annotation)是一种元数据,它可以被添加到Java代码中,并可以提供额外的信息和指令,需要的朋友可以参考下
    2023-08-08
  • 解析Java内存分配和回收策略以及MinorGC、MajorGC、FullGC

    解析Java内存分配和回收策略以及MinorGC、MajorGC、FullGC

    本节将会介绍一下:对象的内存分配与回收策略;对象何时进入新生代、老年代;MinorGC、MajorGC、FullGC的定义区别和触发条件;还有通过图示展示了GC的过程。
    2021-09-09
  • 彻底理解Java中this 关键字

    彻底理解Java中this 关键字

    这篇文章主要介绍了彻底理解Java中this 关键字的相关资料,非常不错,具有参考价值,需要的朋友可以参考下
    2016-05-05
  • Java编程实现月食简单代码分享

    Java编程实现月食简单代码分享

    这篇文章主要介绍了Java编程实现月食简单代码分享,程序很简单,喜欢的朋友可以拿过去玩玩。
    2017-11-11
  • idea打包不出现target的原因及解决

    idea打包不出现target的原因及解决

    文章主要介绍了在使用Maven进行项目打包时,`packaging` 属性的重要性和配置方法,默认情况下,Maven会将项目打包成jar包,如果项目是父级项目,则`packaging`属性应设置为`pom`,并通过`modules`标签引入子项目,这样可以确保项目的模块化管理和正确的构建顺序
    2024-11-11
  • Java中toString方法的深度解析与应用场景详解

    Java中toString方法的深度解析与应用场景详解

    这篇文章主要介绍了Java中的toString方法及其重写的重要性和注意事项,包括信息的完整性、简洁性、格式的统一性、避免性能问题和递归循环等问题,文中将解决的办法介绍的非常详细,需要的朋友可以参考下
    2025-04-04

最新评论