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中4種校驗注解詳解(值校驗、范圍校驗、長度校驗、格式校驗)
這篇文章主要給大家介紹了關于Java中4種校驗注解詳解的相關資料,分別包括值校驗、范圍校驗、長度校驗、格式校驗等,Java注解(Annotation)是一種元數(shù)據(jù),它可以被添加到Java代碼中,并可以提供額外的信息和指令,需要的朋友可以參考下2023-08-08解析Java內存分配和回收策略以及MinorGC、MajorGC、FullGC
本節(jié)將會介紹一下:對象的內存分配與回收策略;對象何時進入新生代、老年代;MinorGC、MajorGC、FullGC的定義區(qū)別和觸發(fā)條件;還有通過圖示展示了GC的過程。2021-09-09