文件名带中文导致的无法下载问题的处理方法

问题:https://jfinal.com/feedback/8272


中文文件名有毒,快逃,能不用就不要用。下面抛个我的砖,不知道有没有大佬有更好的解法。


前端:(带中文的完整路径url,先URLencode,再base64)

var url ="带中文的完整路径";
window.open("/rest/file/"+window.btoa(encodeURIComponent(url)));


后端:先拆base64再URLdecode

@path("/rest/file")
public class FileRest extends BaseRest {
@Clear
public void index() {
String path = getPara();
if (StringUtils.isBlank(path)) {
renderNull();
} else {
path = URLUtil.decode(Base64.decodeStr(path));
File localFile = null;
if (path.startsWith("/userfiles/特定目录免得别人搞事")) {
localFile = new File(PathKit.getWebRootPath() + path);
}
if (localFile != null && localFile.exists()) {
renderFile(localFile);
} else {
renderNull();
}
}
}
}


评论区

超级大富

2022-05-11 14:38

我基本就是给上传的文件名进行重命名,记录原始文件名。下载的时候,就用renderfile,并自动设置下载文件名。