文件上傳到服務(wù)器文件名中文亂碼問題
文件上傳到服務(wù)器文件名中文亂碼問題
1,需求分析
上傳附件到部署服務(wù)器,但是上傳到服務(wù)器出現(xiàn)文件名中文亂碼,中文變成(?)問號(hào),而且在本地測試是正常的。
通過打印日志發(fā)現(xiàn),下面fileName亂碼。
2,原因及解決方式參考
SpringCloud上傳文件,經(jīng)過Zuul,中文文件名亂碼解決辦法,參考文末補(bǔ)充知識(shí)點(diǎn)介紹,非常詳細(xì)。
方案1,如果前后臺(tái)都改加/zuul改動(dòng)較大,所有Controller地址加/zuul,里面所有的方法對應(yīng)前端地址都要修改
方案2,本地啟動(dòng)報(bào)錯(cuò)
最終的方案
2.1) 前端:涉及到上傳的接口前面加/zuul
現(xiàn)地址:zuul/csms/sales/plan/insert/upload
原地址:/csms/sales/plan/insert/upload
后端:controller路徑不改動(dòng)
看下圖網(wǎng)關(guān)及controller的配置信息,直接在前端請求路徑前加/zuul,無法請求到后臺(tái),路徑無效。
2.2)修改nginx路由配置
查找nginx安裝的路徑以及相關(guān)安裝操作命令
Linux環(huán)境下,怎么確定Nginx是以那個(gè)config文件啟動(dòng)的?
[root@localhost ~]# ps -ef | grep nginx
root 21196 1 0 23:40 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 21197 21196 0 23:40 ? 00:00:00 nginx: worker process
root 21199 20993 0 23:42 pts/0 00:00:00 grep --color=auto nginx
配置信息
轉(zhuǎn)發(fā)路由添加上圖下面紅框配置信息,允許/zuul開頭的路徑通過nginx轉(zhuǎn)發(fā)
補(bǔ)充:
SpringCloud上傳文件,經(jīng)過Zuul,中文文件名亂碼解決辦法
最近在使用SpringCloud搭建微服務(wù)的過程中,發(fā)現(xiàn)上傳文件經(jīng)過Zuul網(wǎng)關(guān)轉(zhuǎn)發(fā)的時(shí)候,回應(yīng)為上傳文件名中文亂碼導(dǎo)致文件的寫操作失敗,從而導(dǎo)致文件上傳失敗,但是不經(jīng)過Zuul轉(zhuǎn)發(fā)的時(shí)候,文件上傳正常,因此猜測是Zuul對上傳的請求的編碼進(jìn)行了處理。最終在網(wǎng)上找到了兩種解決方案:
方案一、在上傳文件的請求路徑之前添加字符串“zuul”聲明此請求的編碼不做處理。
/** * 各種poi導(dǎo)入導(dǎo)出的請求控制模塊; * * @author:JunZhou * @Company:LongZheng * @Email:1769676159@qq.com * @2018年1月16日@下午4:28:49 */ @RestController @RequestMapping("/poi") @ClazzNote(desc = "excel文件", resource = "input", modName = "poi") public class POIController { @RequestMapping("/uploadExcel") @ServiceNote(desc = "上傳考勤明細(xì)的excel", auth = ServiceNote.AUTH.CHECK) public ResObject<ResponseMessage> singleFileUpload(MultipartHttpServletRequest request, RedirectAttributes redirectAttributes, HttpServletResponse response) { Integer stateCode = poiService.receiveUploadExcel(request, redirectAttributes, response); //根據(jù)返回值確定響應(yīng)信息實(shí)體; ResponseMessage responseMessage = UploadStatusEnum.desicideUploadStatusBystateCode(stateCode, response); //設(shè)置響應(yīng)狀態(tài)為200; response.setStatus(UploadStatusEnum.UPLOAD_OK.getStateCode()); return new ResObject<ResponseMessage>(null,responseMessage); }
例如在當(dāng)前代碼下,請求路徑是:
localhost:9090/oss/poi/uploadExcel
那么采用方案一解決中文亂碼的請求路徑就是:
localhost:9090/zuul/oss/poi/uploadExcel
經(jīng)過測試,中文亂碼問題成功解決。
方案二:
在方案一的基礎(chǔ)上,不僅要改動(dòng)后端代碼,前端代碼也要變更,較為麻煩,
因此更簡單的方案是在zuul的配置文件中添加一個(gè)如下的屬性:
zuul.servlet-path=/
注意實(shí)在網(wǎng)關(guān)的配置文件中添加的,經(jīng)過本人側(cè)ishi,問題也成功解決了。
參考文章:
1、SpringCloud 上傳文件,經(jīng)過Zuul,中文文件名亂碼解決辦法
2、zuul proxy file upload, file name is Chinese garbled
到此這篇關(guān)于文件上傳到服務(wù)器文件名中文亂碼問題的文章就介紹到這了,更多相關(guān)文件上傳到服務(wù)器文件名中文亂碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx的流式響應(yīng)配置實(shí)現(xiàn)小結(jié)
nginx是一款自由的、開源的、高性能的HTTP服務(wù)器和反向代理服務(wù)器,本文主要介紹了Nginx的流式響應(yīng)配置實(shí)現(xiàn)小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04阿里云國際版使用Nginx作為HTTPS轉(zhuǎn)發(fā)代理服務(wù)器的處理方法
本文介紹了使用NGINX作為HTTPS流量轉(zhuǎn)發(fā)代理的兩種方法。它總結(jié)了NGINX使用HTTP?CONNECT隧道和NGINX流充當(dāng)HTTPS轉(zhuǎn)發(fā)代理的解決方案的原則,環(huán)境構(gòu)建要求,應(yīng)用場景和關(guān)鍵問題2022-05-05Nginx四層負(fù)載均衡的實(shí)現(xiàn)示例
Nginx?不支持傳統(tǒng)的四層負(fù)載均衡,但可以通過stream模塊配合TCP實(shí)現(xiàn)類似的功能,本文主要介紹了Nginx四層負(fù)載均衡的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04nginx?80端口配置多個(gè)location無效訪問404問題
這篇文章主要介紹了nginx?80端口配置多個(gè)location無效訪問404問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06