欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java發(fā)送post請求使用multipart/form-data格式文件數(shù)據(jù)到接口代碼示例

 更新時間:2024年12月21日 14:17:06   作者:花鼠大師  
這篇文章主要介紹了java發(fā)送post請求使用multipart/form-data格式文件數(shù)據(jù)到接口的相關資料,文中指定了數(shù)據(jù)編碼格式為UTF-8,并強調了所需依賴工具類,需要的朋友可以參考下

接口傳輸協(xié)議:HTTP
接口請求方式:POST
數(shù)據(jù)編碼格式:UTF-8
數(shù)據(jù)傳輸格式: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方式傳輸文件
     * 發(fā)送文件方法
     * @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());

        // 請求參數(shù)配置
        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);

            /**
             * 假設有兩個參數(shù)需要傳輸
             * 參數(shù)名:filaName 值 "文件名"
             * 參數(shù)名:file 值:file (該參數(shù)值為file對象)
             */
            //表單中普通參數(shù)
            builder.addPart("filaName ",new StringBody("來源", ContentType.create("text/plain", Consts.UTF_8)));
            
            // 表單中的文件參數(shù) 注意,builder.addBinaryBody的第一個參數(shù)要寫參數(shù)名
            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);// 執(zhí)行提交

            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("數(shù)據(jù)傳輸成功!!!!!!!!!!!!!!!!!!!!");
        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發(fā)送post請求使用multipart/form-data格式文件數(shù)據(jù)到接口的文章就介紹到這了,更多相關java發(fā)送post請求文件數(shù)據(jù)到接口內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java可以作為第一門編程語言學習嗎

    java可以作為第一門編程語言學習嗎

    在本篇內容里小編給JAVA零基礎的網(wǎng)友分享一篇關于java可以作為第一門編程語言學習嗎的文章,有興趣的朋友們可以參考下。
    2020-11-11
  • Java 給圖片和動圖添加水印的方法

    Java 給圖片和動圖添加水印的方法

    本篇文章主要介紹了Java 給圖片和動圖添加水印的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 基于JavaMail的常用類詳細介紹

    基于JavaMail的常用類詳細介紹

    以下是對JavaMail的常用類進行了詳細分析的介紹,需要的朋友可以過來參考下
    2013-09-09
  • 在編碼時如何使用\r與\n,兩者的區(qū)別

    在編碼時如何使用\r與\n,兩者的區(qū)別

    本篇文章是對\r與\n兩者的區(qū)別,以及編程語言中如何使用進行了詳細的分析介紹,需要的朋友可以參考下
    2015-07-07
  • Java中4種校驗注解詳解(值校驗、范圍校驗、長度校驗、格式校驗)

    Java中4種校驗注解詳解(值校驗、范圍校驗、長度校驗、格式校驗)

    這篇文章主要給大家介紹了關于Java中4種校驗注解詳解的相關資料,分別包括值校驗、范圍校驗、長度校驗、格式校驗等,Java注解(Annotation)是一種元數(shù)據(jù),它可以被添加到Java代碼中,并可以提供額外的信息和指令,需要的朋友可以參考下
    2023-08-08
  • 解析Java內存分配和回收策略以及MinorGC、MajorGC、FullGC

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

    本節(jié)將會介紹一下:對象的內存分配與回收策略;對象何時進入新生代、老年代;MinorGC、MajorGC、FullGC的定義區(qū)別和觸發(fā)條件;還有通過圖示展示了GC的過程。
    2021-09-09
  • 徹底理解Java中this 關鍵字

    徹底理解Java中this 關鍵字

    這篇文章主要介紹了徹底理解Java中this 關鍵字的相關資料,非常不錯,具有參考價值,需要的朋友可以參考下
    2016-05-05
  • Java編程實現(xiàn)月食簡單代碼分享

    Java編程實現(xiàn)月食簡單代碼分享

    這篇文章主要介紹了Java編程實現(xiàn)月食簡單代碼分享,程序很簡單,喜歡的朋友可以拿過去玩玩。
    2017-11-11
  • idea打包不出現(xiàn)target的原因及解決

    idea打包不出現(xiàn)target的原因及解決

    文章主要介紹了在使用Maven進行項目打包時,`packaging` 屬性的重要性和配置方法,默認情況下,Maven會將項目打包成jar包,如果項目是父級項目,則`packaging`屬性應設置為`pom`,并通過`modules`標簽引入子項目,這樣可以確保項目的模塊化管理和正確的構建順序
    2024-11-11
  • Java中toString方法的深度解析與應用場景詳解

    Java中toString方法的深度解析與應用場景詳解

    這篇文章主要介紹了Java中的toString方法及其重寫的重要性和注意事項,包括信息的完整性、簡潔性、格式的統(tǒng)一性、避免性能問題和遞歸循環(huán)等問題,文中將解決的辦法介紹的非常詳細,需要的朋友可以參考下
    2025-04-04

最新評論