项目

一般

简介

应用附件下载的功能,下载后原中文名丢失的问题(原文件名里有中文.xxx,下载后就变成空格.xxx )

由 huang junrui 在 超过 3 年 之前添加

异常信息:应用附件下载的功能,下载后原中文名丢失的问题(原文件名里有中文.xxx,下载后就变成空格.xxx ),后台日志不报错

版本号:202106101338

解决时间:2021-9-7

解决方案:JVM 参数加上 -Dapusic.skipCheckPrintableUsAscii=true (注意空格,别写成 -Dapusic.skipCheckPrintableUsAscii = true),并重启V10,如果还不行,替换附件中的 ApusicAs/aas/modules/aas-nucleus-grizzly-all.jar 包,保留加上的jvm参数再重启V10

界面现象:

日志截图:

解决操作:


回复 (1)

RE: 应用附件下载的功能,下载后原中文名丢失的问题(原文件名里有中文.xxx,下载后就变成空格.xxx ) - 由 she sh超过 3 年 之前添加

补充说明:

上述解决方案解决了在aas10不过滤header里的非法字符。

但是浏览器上还是可能出现带中文的文件名显示乱码得问题。原因在于应用一般都是沿用tomcat上的写法:

String str6 = new String(f.getName().getBytes("utf-8"),"iso-8859-1");   //将文件名先编码成utf-8 然后解码成iso-8859-1
 headers.add("Content-Disposition", "attachment;filename="+ str4);      //写入header

这种写法不是标准写法,恰巧利用了iso-8859-1单字节的特性,有的浏览器默认是用iso-8859-1解码的,所以可以正常显示。对于浏览器的兼容性不是很好。

建议在构造附件response时采用以下标准写法:

String str4=java.net.URLEncoder.encode(f.getName(), "UTF-8").replace("+", "%20");     //先进行urlencoding
headers.add("Content-Disposition", "attachment;filename="
        + str4+ ";filename*=utf-8''" +str4);                                          //header里用对浏览器兼容性更好的写法
    (1-1/1)