我需要显示当前所选文件的名称(在<input type="file">
元素中)。
一切都很好,唯一的问题是我得到这种字符串“C:\ fakepath \ typog_rules.pdf“(browset自动将其作为输入元素的值)。
当我尝试将字符串分割为'\'
或'\\'
时,由于未转义的斜杠,它会失败。尝试匹配/替换斜线也失败了。有没有解决的办法?我需要这个至少在Opera和IE中工作(因为在其他浏览器中我可以使用FileReader)
E.G。我将“C:\ fakepath \ typog_rules.pdf”作为输入,并希望将“typog_rules.pdf”作为输出。
答案 0 :(得分:24)
出于安全原因,无法通过<input type="file" />
元素获取文件的真实完整路径。
This question已经提及,并链接到有关此主题的其他Stack Overflow问题。
string = string.split("\\");
在JavaScript中,反斜杠用于转义特殊字符,例如换行符(\n
)。如果要使用文字反斜杠,则必须使用双反斜杠。
因此,如果要匹配两个反斜杠,则必须使用四个反斜杠。例如,alert("\\\\")
将显示一个包含两个反斜杠的对话框。
答案 1 :(得分:4)
我认为这更接近你正在寻找的答案:
<input type="file">
$file = $(file);
var filename = fileElement[0].files[0].name;
答案 2 :(得分:3)
逃避反斜杠字符。
foo.split('\\')
答案 3 :(得分:0)
为元素添加输入id并执行类似的操作:
document.getElementById('inputId').value.split(/[\\$]/).pop()
答案 4 :(得分:0)
有点hacky,但是可以用:
const input = '\text';
const output = JSON.stringify(input).replace(/((^")|("$))/g, "").trim();
console.log({ input, output });
// { input: '\text', output: '\\text' }