java發(fā)送post請(qǐng)求使用multipart/form-data格式文件數(shù)據(jù)到接口代碼示例
接口傳輸協(xié)議:HTTP
接口請(qǐng)求方式: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()); // 請(qǐng)求參數(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è)有兩個(gè)參數(shù)需要傳輸 * 參數(shù)名:filaName 值 "文件名" * 參數(shù)名:file 值:file (該參數(shù)值為file對(duì)象) */ //表單中普通參數(shù) builder.addPart("filaName ",new StringBody("來源", ContentType.create("text/plain", Consts.UTF_8))); // 表單中的文件參數(shù) 注意,builder.addBinaryBody的第一個(gè)參數(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) { // 返回響應(yīng)結(jié)果 res = EntityUtils.toString(response.getEntity(), java.nio.charset.Charset.forName("UTF-8")); }else { res = "響應(yīng)失敗"; log.error("響應(yīng)失?。?); } return res; } catch (Exception e) { e.printStackTrace(); log.error("調(diào)用HttpPost失?。? + e.toString()); } finally { if (client != null) { try { client.close(); } catch (IOException e) { log.error("關(guān)閉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){ //此處為舉例,需要添加哪些頭部信息自行添加即可 //設(shè)置時(shí)間戳,nginx,underscores_in_headers on;放到http配置里,否則nginx會(huì)忽略包含"_"的頭信息 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>
總結(jié)
到此這篇關(guān)于java發(fā)送post請(qǐng)求使用multipart/form-data格式文件數(shù)據(jù)到接口的文章就介紹到這了,更多相關(guān)java發(fā)送post請(qǐng)求文件數(shù)據(jù)到接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中4種校驗(yàn)注解詳解(值校驗(yàn)、范圍校驗(yàn)、長度校驗(yàn)、格式校驗(yàn))
這篇文章主要給大家介紹了關(guān)于Java中4種校驗(yàn)注解詳解的相關(guān)資料,分別包括值校驗(yàn)、范圍校驗(yàn)、長度校驗(yàn)、格式校驗(yàn)等,Java注解(Annotation)是一種元數(shù)據(jù),它可以被添加到Java代碼中,并可以提供額外的信息和指令,需要的朋友可以參考下2023-08-08解析Java內(nèi)存分配和回收策略以及MinorGC、MajorGC、FullGC
本節(jié)將會(huì)介紹一下:對(duì)象的內(nèi)存分配與回收策略;對(duì)象何時(shí)進(jìn)入新生代、老年代;MinorGC、MajorGC、FullGC的定義區(qū)別和觸發(fā)條件;還有通過圖示展示了GC的過程。2021-09-09Java編程實(shí)現(xiàn)月食簡(jiǎn)單代碼分享
這篇文章主要介紹了Java編程實(shí)現(xiàn)月食簡(jiǎn)單代碼分享,程序很簡(jiǎn)單,喜歡的朋友可以拿過去玩玩。2017-11-11Java中toString方法的深度解析與應(yīng)用場(chǎng)景詳解
這篇文章主要介紹了Java中的toString方法及其重寫的重要性和注意事項(xiàng),包括信息的完整性、簡(jiǎn)潔性、格式的統(tǒng)一性、避免性能問題和遞歸循環(huán)等問題,文中將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04