如何处理文件名中的井号('#')?

时间:2016-08-08 22:50:48

标签: javascript node.js

对于Node.js中的文件名,我遇到了一个问题,其中一些传入的文件具有井号#,这会导致在处理文件系统时出现问题,然后使用从文件名中生成的URL来重新访问它在<img>标记中。

var fileDir = "/foo/bar#s.png/";
var dirContents = fs.readdirSync(fileDir);

document.getElementById("id1").src = encodeURIComponent(path.join('cache', fileDir, dirContents[0]))
// %2Fcache%2Ffoo%2Fbar%23s.png%2Fbar%23s%2001.png :: Broken img

document.getElementById("id2").src = path.join('cache', fileDir, dirContents[1])
// /cache/foo/bar#s.png/bar#s 02.png :: Also broken img

我可以控制目录名称,但最终文件.png取决于加载文件的用户。我该如何处理这些角色?

1 个答案:

答案 0 :(得分:0)

你会escape these characters

document.getElementById("id1").src = path.join('cache',
                                               ...fileDir.split("/").map(encodeURIComponent),
                                               encodeURIComponent(dirContents[0]));

但是,在接收图像请求时,您需要确保服务器再次正确解码它们,并非所有实现都同意如何处理文件路径中的百分比编码。更容易,可能更好的方法是首先防止这些字符出现在文件名中。