我正在开发一个带文件上传控件的简单网页:
<input type="file" name="file">
当我测试它时,我发现了这个奇怪的错误:当我第二次从磁盘中选择一个文件时,文件名就会出错。
例如,当我选择E:\tmp\123456789012345.jpg
时,输入的值将为C:\fakepath\123456789012345.jpg
,这是正确的。但是,如果我再次单击“浏览”按钮并选择文件E:\tmp\a.jpg
,则输入的值将变为C:\fakepath\45.jpg
,从而导致文件未找到错误。
在使用不同文件重复测试后,我发现只有当我选择文件名较长的文件时才会出现错误,然后选择较短的文件名。
此外,损坏的文件名是&#34;后缀&#34;更长的文件名(第一次选择)和broken_file_name.length + correct_file_name.length == long_file_name - 4
。
示例案例和相应的控制台输出:
// first, choose e:\tmp\123456789012345.jpg
>$('input[name="file"]').val()
<"C:\fakepath\123456789012345.jpg"
>$('input[name="file"]').val().length
<31
// then choose e:\tmp\a.jpg
>$('input[name="file"]').val()
<"C:\fakepath\45.jpg" // should be "C:\fakepath\a.jpg"
>$('input[name="file"]').val().length
<18 // should be 17
// choose e:\tmp\123456789012345.jpg again, and then choose e:\tmp\ab.jpg
>$('input[name="file"]').val()
<"C:\fakepath\5.jpg" // should be "C:\fakepath\ab.jpg"
>$('input[name="file"]').val().length
<17 // should be 18
// choose e:\tmp\123456789012345.jpg again, and then choose e:\tmp\abc.jpg
>$('input[name="file"]').val()
<"C:\fakepath\.jpg" // should be "C:\fakepath\abc.jpg"
>$('input[name="file"]').val().length
<16 // should be 19
我尝试在Chromium问题列表中搜索此内容,但一无所获。
该错误发生在Chrome 39上,并在Chrome 41上消失。由于在磁盘上使用真实路径而不是&#34; C:\ fakepath&#34;。
,IE工作正常。有什么想法吗?