对于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
取决于加载文件的用户。我该如何处理这些角色?
答案 0 :(得分:0)
document.getElementById("id1").src = path.join('cache',
...fileDir.split("/").map(encodeURIComponent),
encodeURIComponent(dirContents[0]));
但是,在接收图像请求时,您需要确保服务器再次正确解码它们,并非所有实现都同意如何处理文件路径中的百分比编码。更容易,可能更好的方法是首先防止这些字符出现在文件名中。