超链接的href路径中包含特殊符号和中文,在点击后,文件下载失败,提示404。
查看了请求的路径,发现从#号后面的部分被浏览器自动截掉了,所以文件是不存在的。
解决方法是把文件名称编码后再请求:
初始写法:
<a href="{PATH}" target="_blank" style="color:#3F679E;text-decoration:none">下载</a>
{PATH}为文件的路径。
修改后的写法:
<a href="javascript:void(0)" οnclick="FileNameEncode('{PATH}',this)" target="_blank" style="color:#3F679E;text-decoration:none">下载</a>
FileNameEncode方法:
//对文件名称进行转义(处理中文或特殊符号无法下载问题)
function FileNameEncode(filePath,obj) {
var index = filePath.lastIndexOf("\/");
fileName = filePath.substring(index + 1, filePath.length);//文件名称
var codeName = encodeURIComponent(fileName);//转义后的文件名
var index1 = filePath.lastIndexOf("\/");
filePathNotFileName = filePath.substring(0, index + 1);//除文件名称外的部分
var fullPath = filePathNotFileName + codeName;//文件名称转义后的完整文件路径
$(obj).attr("href", fullPath);//设置下载的超链接href属性值
}
处理的思路就是拿到完整的请求路径,然后找到文件名称部分(最后一个斜杠后面的部分),将文件名称通过encodeURIComponent方法进行编码,然后把编码后的文件名称替换到原来的路径中。