1. 程式人生 > >java後臺發起上傳檔案的post請求(http和https)

java後臺發起上傳檔案的post請求(http和https)

分享一下我的偶像大神的人工智慧教程!http://blog.csdn.net/jiangjunshow

也歡迎轉載我的文章,轉載請註明出處 https://blog.csdn.net/aabbyyz

一、http post 對於檔案上傳,客戶端通常就是頁面,在頁面裡實現上傳檔案不是什麼難事,寫個form,加上enctype = "multipart/form-data",在寫個接收的就可以了,沒什麼難的。如:
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <title>Hello World!</title>  
  5. </head>  
  6. <body>  
  7.     <form method="POST" enctype="multipart/form-data" action="/XXX">   
  8.            <p>檔案1:<input type="file" name="file1" /></p>  
  9.            <p>檔案:<input type="file" name="file" /></p>  
  10.            <p>其他資訊:<input name="luid" /></p>  
  11.            <p><input type="submit" value="上傳" /></p>  
  12.     </form>
  13. </body>  
  14. </html>  

如果要用java.net.HttpURLConnection來實現檔案上傳,還真有點搞頭, 實現思路和具體步驟就是模擬頁面的請求,頁面發出的格式如下:
  1. -----------------------------7da2e536604c8  
  2. Content-Disposition: form-data; name="luid"  
  3.   
  4. 123  
  5. -----------------------------7da2e536604c8  
  6. Content-Disposition: form-data; name="file1"; filename="D:\haha.txt"  
  7. Content-Type: text/plain  
  8.   
  9. haha  
  10.   hahaha  
  11. -----------------------------7da2e536604c8  
  12. Content-Disposition: form-data; name="file"; filename="D:\huhu.png"  
  13. Content-Type: application/octet-stream  
  14.   
  15. 這裡是圖片的二進位制資料 
  16. -----------------------------7da2e536604c8--
上面username是form表單中的文字引數,值為123,file1是form表單中上傳的文字檔案。file是form表單中上傳的其他型別的檔案,他們的Content-Type不一樣。 知道了這些,就可以編寫程式碼來模擬了,這裡只上傳一個檔案file,是張圖片,附上程式碼的截圖:


以上的空行"\r\n"是比較嚴格的,要換行或者換兩行,都是根據格式來的。
二、https post 一般都是http的請求,但現在也有越來越多的外部介面採用https的方式來呼叫。比如這次工作中需要呼叫的FaceId他們的身份證識別介面,這個介面就是https的,而且傳遞的引數裡還需要身份證照片,這明顯是個檔案。如下:


java後臺發起https的檔案上傳請求的原理以及整個步驟和http的基本一致,只是這次的URLConnection是HttpsURLConnection,而且由於https的請求需要簽名等安全認證,所以會在設定HttpsURLConnection時需要多設定兩個屬性,如下的setSSLSocketFactory()和setHostnameVerifier():
所需要的TrustAnyTrustManager類和TrustAnyHostnameVerifier類程式碼如下:
其他的程式碼就和HttpURLConnection的一樣了。
以上的程式碼都是使用JDK自帶的net工具類,然後模擬頁面的form發出的請求來完成的,如果想使用HttpClient來完成傳送請求也是可以的,並且更加簡單明瞭,不需要自己寫模擬的步驟。因為是第三方工具包,需引入對應jar包: <dependency>           <groupId>org.apache.httpcomponents</groupId>            <artifactId>httpclient</artifactId>           <version>4.5.2</version>          </dependency>  <dependency>           <groupId>org.apache.httpcomponents</groupId>            <artifactId>httpmime</artifactId>           <version>4.5.2</version>            </dependency> 編寫的程式碼如下:
以上程式碼都是經過測試的測試程式碼,你可以自己封裝好以供自己今後使用(ps:別想複製,程式碼都是圖片,因為我在沙盒內,程式碼複製不出來0.0)!

這裡寫圖片描述

給我偶像的人工智慧教程打call!http://blog.csdn.net/jiangjunshow