zoukankan      html  css  js  c++  java
  • Spring Boot文件无法下载问题排查过程记录

    真实原因为项目启动编码问题,将排查过程做记录

    最近在Spring Boot项目中做下载功能,将要下载的文件放在默认的 resource/static/template 路径下,打好包之后放在centos服务器上,结果在下载的时候提示找不到文件,排查时发现解压后的template中的中文文件名都变成了 ???,因此在下载的时候无法正确匹配路径导致无法下载。
    根据网上的方法,按照以下步骤设置本地语言环境:

    • step1
    vim /etc/locale.conf
    LANG = "zh_CN.UTF-8"
    
    • step2
    vim ~/.bashrc
    #追加
    export LANG='UTF-8'
    export LC_ALL='zh_CN.UTF-8'
    export LC_CTYPE='zh_CN.UTF-8'
    
    • step3
    source ~/.bashrc
    
    • step4
    重启项目
    

    经过一番操作,原来显示为 ??? 的文件显示中文名了,但是下载时依然提示找不到文件。然后使用echo $LANG ,locale命令确认系统中确实安装有中文语言包,并且设置了系统语言为中文。这时发现打印的日志中中文也变成了???,此时怀疑是jar包文件打包有问题,但是重新设置文件编码、打包参数为UTF8之后,问题依旧,故排除打包问题。

    最后,检查项目启动脚本文件,在启动脚本中设置编码格式为UTF-8,即将原命令:

    nohup java -server -Xms4096m -Xmx4096m -XX:PermSize=512m -jar /export/App/xxxx.jar > /dev/null 2>&1 &
    

    修改为

    nohup java -Dfile.encoding=utf-8  -server -Xms4096m -Xmx4096m -XX:PermSize=512m -jar /export/App/xxxx.jar > /dev/null 2>&1 &
    

    重启项目后,文件可正常下载,问题解决,日志中的中文也可以正常打印。

    总结:下载文件失败因中文文件路径在项目中不被识别,因此找不到文件。在项目启动时设置UTF-8编码可解决。

  • 相关阅读:
    数据查询表,列名对比
    Oracle ORA06550:错误
    设计模式——单例模式
    MS SQL 建表SQL的脚本
    WinForm 清空界面控件值的小技巧
    WinForm系列——控件的输入限制
    C++学习笔记——常量定义
    PLSQL 调试触发器
    static类为什么不能用sealed关键字修饰
    C++虚函数解析(转)
  • 原文地址:https://www.cnblogs.com/liesun/p/12711661.html
Copyright © 2011-2022 走看看