最近一直都比較忙,堅持月月更新博客的計劃不得停止了,今天抽出點時間來講說最近項目中遇到的一個問題,有關request post請求格式中的multipart/form-data格式。javascript
最近在參與一個項目過程當中遇到一個問題,相信大部分人都遇到過:html
在後端與前端約定好application/json格式傳遞數據時,由於後臺是
go
強類型語言,在定義api接口時,某些字段要求是整型類型,可是對於前端來講輸入框或者從url中的search取到的參數都是字符串,不得不進行前端類型轉換。前端
咋一看,對於接口參數比較少的api前端轉換沒有什麼,可是對於通常的交互複雜,參數比較多的接口,要對大部分參數進行類型轉換就是一種吃力不討好的活。好在後端同窗還支持另外一種的先後端數據交互格式,即multipart/form-data
。經過該格式後端取到前端傳遞的數據就是數字了(即便前端傳遞的是字符串),而不像json格式獲取的是字符串。這樣,就不須要額外對前端獲取的數據進行特殊轉換了。下面就來講說form-data。java
multipart/form-data
是基於post方法來傳遞數據的,而且其請求內容格式爲Content-Type: multipart/form-data,用來指定請求內容的數據編碼格式。另外,該格式會生成一個boundary
字符串來分割請求頭與請求體的,具體的是以一個boundary=${boundary}
來進行分割,僞碼以下:git
... Content-Type: multipart/form-data; boundary=${boundary} --${boundary} ... ... --${boundary}--
上面boundary=${boundary}
以後就是請求體內容了,請求體內容各字段之間以--${boundary}
來進行分割,以--${boundary}--
來結束請求體內容。具體能夠參考下面例子:github
POST http://www.example.com HTTP/1.1 Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryyb1zYhTI38xpQxBK ------WebKitFormBoundaryyb1zYhTI38xpQxBK Content-Disposition: form-data; name="city_id" 1 ------WebKitFormBoundaryyb1zYhTI38xpQxBK Content-Disposition: form-data; name="company_id" 2 ------WebKitFormBoundaryyb1zYhTI38xpQxBK Content-Disposition: form-data; name="file"; filename="chrome.png" Content-Type: image/png PNG ... content of chrome.png ... ------WebKitFormBoundaryyb1zYhTI38xpQxBK--
form-data
格式通常是用來進行文件上傳的。使用表單上傳文件時,必須讓 ajax