文件上传到服务器文件名中文乱码问题
1,需求分析
上传附件到部署服务器,但是上传到服务器出现文件名中文乱码,中文变成(?)问号,而且在本地测试是正常的。
通过打印日志发现,下面fileName乱码。
2,原因及解决方式参考
SpringCloud上传文件,经过Zuul,中文文件名乱码解决办法,参考文末补充知识点介绍,非常详细。
方案1,如果前后台都改加/zuul改动较大,所有Controller地址加/zuul,里面所有的方法对应前端地址都要修改
方案2,本地启动报错
最终的方案
2.1) 前端:涉及到上传的接口前面加/zuul
现地址:zuul/csms/sales/plan/insert/upload
原地址:/csms/sales/plan/insert/upload
后端:controller路径不改动
看下图网关及controller的配置信息,直接在前端请求路径前加/zuul,无法请求到后台,路径无效。
2.2)修改nginx路由配置
查找nginx安装的路径以及相关安装操作命令
Linux环境下,怎么确定Nginx是以那个config文件启动的?
[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
配置信息
转发路由添加上图下面红框配置信息,允许/zuul开头的路径通过nginx转发
补充:
SpringCloud上传文件,经过Zuul,中文文件名乱码解决办法
最近在使用SpringCloud搭建微服务的过程中,发现上传文件经过Zuul网关转发的时候,回应为上传文件名中文乱码导致文件的写操作失败,从而导致文件上传失败,但是不经过Zuul转发的时候,文件上传正常,因此猜测是Zuul对上传的请求的编码进行了处理。最终在网上找到了两种解决方案:
方案一、在上传文件的请求路径之前添加字符串“zuul”声明此请求的编码不做处理。
/** * 各种poi导入导出的请求控制模块; * * @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 = "上传考勤明细的excel", auth = ServiceNote.AUTH.CHECK) public ResObject singleFileUpload(MultipartHttpServletRequest request, RedirectAttributes redirectAttributes, HttpServletResponse response) { Integer stateCode = poiService.receiveUploadExcel(request, redirectAttributes, response); //根据返回值确定响应信息实体; ResponseMessage responseMessage = UploadStatusEnum.desicideUploadStatusBystateCode(stateCode, response); //设置响应状态为200; response.setStatus(UploadStatusEnum.UPLOAD_OK.getStateCode()); return new ResObject(null,responseMessage); }
例如在当前代码下,请求路径是:
localhost:9090/oss/poi/uploadExcel
那么采用方案一解决中文乱码的请求路径就是:
localhost:9090/zuul/oss/poi/uploadExcel
经过测试,中文乱码问题成功解决。
方案二:
在方案一的基础上,不仅要改动后端代码,前端代码也要变更,较为麻烦,
因此更简单的方案是在zuul的配置文件中添加一个如下的属性:
zuul.servlet-path=/
注意实在网关的配置文件中添加的,经过本人侧ishi,问题也成功解决了。
参考文章:
1、SpringCloud 上传文件,经过Zuul,中文文件名乱码解决办法
2、zuul proxy file upload, file name is Chinese garbled
到此这篇关于文件上传到服务器文件名中文乱码问题的文章就介绍到这了,更多相关文件上传到服务器文件名中文乱码内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!