文件上传到服务器文件名中文乱码问题
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<ResponseMessage> 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<ResponseMessage>(null,responseMessage); }例如在当前代码下,请求路径是:
localhost:9090/oss/poi/uploadExcel
那么采用方案一解决中文乱码的请求路径就是:
localhost:9090/zuul/oss/poi/uploadExcel
经过测试,中文乱码问题成功解决。
方案二:
在方案一的基础上,不仅要改动后端代码,前端代码也要变更,较为麻烦,
因此更简单的方案是在zuul的配置文件中添加一个如下的属性: zuul.servlet-path=/注意实在网关的配置文件中添加的,经过本人侧ishi,问题也成功解决了。
参考文章:
暂无评论内容