保存音頻文件接口
http://xxxx/ecc/api/ei/saveSounds?content=開心1&xxxxxx=xxxxx&sign=xxxxx
header:access-token=3756d53e-a28f-47da-bfc7-3898a418b4c6
body:soundFile=錄音文件.mp3
經過zuul網關之后,字符串參數content=開心1,結果變成了“開心1,開心1”,不傳文件時正常。
解決方案:
網關配置文件加個參數:
zuul: #上傳文件服務的前綴 servlet-path: /file #需要忽略的頭部信息,不在傳播到其他服務 sensitive-headers: Access-Control-Allow-Origin ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Token,APPToken
請求url加上/file前綴就解決問題。
舊請求url:http://xxxx/ecc/api/ei/saveSounds?content=開心1&xxxxxx=xxxxx&sign=xxxxx
新請求url:http://xxxx/file/ecc/api/ei/saveSounds?content=開心1&xxxxxx=xxxxx&sign=xxxxx
原理:
默認請求是spring MVC,網關上傳文件時會有許多問題,上傳文件時走zuul servlet就沒有問題了,默認servlet-path=/zuul,我這里改為了/file。
另一個坑點
我的網關會解析header和body里的參數,合起來校驗sign簽名的有效性。
所以,一旦body里是文件就會I/O異常。
解決辦法:走zuul servlet時body是文件,我們跳過解析body里的參數。
