前言
由于本人接觸最多的是電子商城的開發(fā),目前涉及到的接口數(shù)據(jù)處理最多的為字符串,少部分為圖片,因此處理大型文件的經(jīng)驗比較少。
在學習Java Spring過程中,了解到Java Spring處理數(shù)據(jù)過程中有很多值得學習的地方。就拿multipart來說,Spring為multipart提供了很多擴展性的配置,能夠針對不同的業(yè)務場景進行相關配置
multipart
對于表單提交,multipart格式的數(shù)據(jù)會將一個表單拆分成多個部分,每一個部分對應一個輸入域。在一半表單輸入中,它所對應的部分會放置文本形數(shù)據(jù),如果上傳文件的話,它可以對應是二進制
比如表單提交數(shù)據(jù)如下
firstName=ric&lastName=mansen&age=99
每一個參數(shù)用&分隔開
展示為multipart請求體如下
-----------webKitFFormBoundarysioud821
Content-Disposition: form-data; name="firstName"
ric
-----------webKitFFormBoundarysioud821
Content-Disposition: form-data; name="lastName"
manson
-----------webKitFFormBoundarysioud821
Content-Disposition: form-data; name="age"
99
如果為文件的話,multipart請求體如下
-----------webKitFFormBoundarysioud821
Content-Disposition: form-data; name="profilePicture"; fileName="me.jpg"
Content-type: image/jpeg
[[Binary image data goes here]]
文件請求體相比普通數(shù)據(jù)請求體多了Content-type的標示,以及數(shù)據(jù)是以二進制形式進行傳輸
配置multipart解析器
解析multipart中的數(shù)據(jù)的功能由Spring中的MultipartResolver策略接口實現(xiàn),通過這個實現(xiàn)來解析multipart請求中的內(nèi)容
Spring內(nèi)置了兩個MultipartResolver的實現(xiàn)提供給我們選擇
- CommonsMultipartResolver: 使用 Jakarta Commons FileUpload解析multipart請求
- StandardServletMultipartResolver: 依賴于Servlet 3.0對multipart請求的支持
一般對于3.0或者更高級的版本,優(yōu)先使用StandardServletMultipartResolver,因為它使用了Servlet提供的功能,并且不需要依賴任何其他項目
servlet小簡介
Java Servlet是運行在web服務器或者應用服務器上的程序,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數(shù)據(jù)庫或應用程序之間的中間層。
使用 Servlet,可以收集來自網(wǎng)頁表單的用戶輸入,呈現(xiàn)來自數(shù)據(jù)庫或者其他源的記錄,還可以動態(tài)創(chuàng)建網(wǎng)頁。
具體細節(jié)之后再去了解(原諒下本人懶惰0.0)
處理multipart請求
一般處理multipart請求,實在某個控制器方法參數(shù)上添加@RequestPart注解
@RequestMapping(value="/register", method=POST)
public String processRegistration (
@RequestPart("profilePicture") byte[] profilePicture,
@Valid Spitter spitter,
Errors errors) {
...
}
以上就是上傳文件后,byte數(shù)組用于保存請求中對應的part數(shù)據(jù)(通過@RequestPart指定)