這裏是修真院後端小課堂,每篇分享文從html
【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】前端
八個方面深度解析後端知識/技能,本篇分享的是:java
【如何調用第三方API實現圖片上傳。】程序員
你們好,我是IT修真院鄭州分院第11期的學員何爽,一枚正直純潔善良的後端程序員,今天給你們分享一下,修真院官網java(職業)任務5,深度思考中的知識點——如何調用第三方API實現圖片上傳。spring
1.背景介紹數據庫
在開發過程當中,不管是作網頁仍是APP,基本上都會有圖片上傳的業務需求,最典型的就是註冊帳號以後須要用戶上傳頭像或者用戶驗證的時候上傳身份證照片。json
而java中實現圖片上傳大概有兩種形式:後端
一種是使用jsp+controller實現圖片上傳。api
一種是使用jsp+servlet實現圖片上傳;數組
存儲基本上也有兩種形式
在數據庫中直接存儲blob類型的圖片或者圖片存儲在服務器上並在數據庫中存儲箱對應的路徑。
如今主流的項目開發都是用的後者方式,這時就須要咱們使用第三方API
那麼什麼是API?
API 是用於構建應用程序軟件的一組子程序定義,協議和工具。通常來講,這是一套明肯定義的各類軟件組件之間的通訊方法。
2.知識剖析
第三方對外一般會有API和SDK以便咱們使用,那麼什麼是SDK?
SDK (Software Development Kit)中文是"軟體開發工具組",用來幫一個 產品、平臺開發應用程式的工具組,
由產品的廠商提供給開發者使用的。輔助開發某一類軟件的相關文檔、範例和工具的集合均可以叫作「SDK」。
任務中使用的阿里雲的對象存儲OSS,講一下什麼是OSS。
阿里雲對象存儲服務(Object Storage Service,簡稱 OSS),是阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。
能夠經過調用 API,在任何應用、任什麼時候間、任何地點上傳和下載數據,也能夠經過Web控制檯對數據進行
簡單的管理。OSS適合存聽任意類型的文件,適合各類網站、開發企業及開發者使用。
在springmvc中,使用jsp+controller實現圖片上傳的基本思路是:
(1)使用MultipartFile類接收上傳的圖片;
(2)將圖片存儲在服務器(阿里雲OSS),返回一個圖片路徑;
(3)圖片路徑存儲在用戶信息中以供調用。
3.常見問題
(1) form表單提交的是MultipartFile類型的文件,而第三方api須要的是file類型的文件,如何進行轉換?
(2).如何經過調用阿里雲API完成圖片的上傳
4.解決方案
(1)第一種方法:
MultipartFile file = xxx;
CommonsMultipartFile cf= (CommonsMultipartFile)file;
DiskFileItem fi = (DiskFileItem)cf.getFileItem();
File f = fi.getStoreLocation();
會在項目的根目錄的臨時文件夾下生成一個文件。
第二種方法:
transferTo(File dest);
會在項目中生成一個新文件;
第三種方法:
File f = (File) xxx 強轉便可。前提是要配置multipartResolver,要否則會報類型轉換失敗的異常。
<bean id="multipartResolver"
<property name="maxUploadSize" value="104857600"/>
<property name="maxInMemorySize" value="4096"/>
</bean>
第四種方法:
Workbook wb = Workbook.getWorkbook(xxx .getInputStream());
轉換爲輸入流,直接讀取;
第五種方法:
byte[] buffer = myfile.getBytes();
先轉換爲字節數組。
(2)詳見第四個模塊編碼實戰
5.編碼實戰
6.擴展思考
集成第三方接口的技巧總結:
調用接口其實也差很少是這樣:
發送請求(向第三方發送請求,傳遞參數)——收到數據(收到第三方的返回數據)——數據處理(數據解析)——返回前端——前端處理(前端展現封裝數據)。
1)api文檔閱讀:主要看請求參數和返回數據,有些文檔有不少demo,這些demo會幫助咱們不少。
參考這個內容:http://www.pmcaff.com/discuss...
2)json數據解析:net.fs.json仍是阿里的fastjson仍是jacksondegnd
具體參考:https://www.cnblogs.com/huoer...
3)調用第三方使用的工具:Httpclient、urlConnection仍是RestTemplate
具體內容參考:http://blog.csdn.net/lmb55/ar...
7.參考文獻
https://www.cnblogs.com/fengl...
https://blog.csdn.net/qq_4180...
https://blog.csdn.net/qq_4181...
8.更多討論
Q1:提問人:張亞強:
騰訊cos和阿里oss第三方對象存儲有什麼異同?
A1:回答人(何爽):
就我的理解其二者並無什麼大的不一樣,我的理解二者都是一個遠程內存罷了,oss能夠自我添加水印,縮略圖,防盜鏈等,但cos卻不能夠自我添加,須要引入第三方jar包實現。
Q2:提問人:張亞強
上傳圖片時是否能夠經過字符流進行上傳?
A2:回答人(何爽):
不能,由於圖片是二進制編碼。
Q3:提問人:周宏浩
攔截器怎麼攔截圖片?
A3:回答人(何爽):
在from裏面加入了enctype="multipart/form-data" 就能夠了。