Nahrání souborů a C:\fakepath\

Nedávno jsem pracoval na projektu, který vyžadoval poskytnutí widgetu pro nahrávání AJAX uživatelům. Rozhodl jsem se použít widget Dojo's dojox.form.FileInput, takže tlačítko „Nahrát“ bude vypadat stejně jako každé jiné tlačítko ve webové aplikaci. Všechno fungovalo skvěle, dokud jsem netestoval widget v Chrome a nezjistil, že hodnota vstupního uzlu byla nastavena na C:\fakepath \{Původní název souboru}. Poté jsem zkontroloval Internet Explorer a Safari; oba uváděli před "C:\fakepath " k názvu souboru. WTF?!

Po nějakém průzkumu jsem našel tento blogový příspěvek, který vysvětluje:

To dávalo smysl; v podstatě prohlížeč krmí to lame C:\fakepath \ text dovnitř. Naštěstí vše, co jsem potřeboval, bylo vyřešit problém jednoduchým voláním nahrazení řetězce:

// Change the node's value by removing the fake path
inputNode.value = fileInput.value.replace("C:\\fakepath\\", "");

Fuj -- vyhnul se kulce. Jen jsem to chtěl zveřejnit pro všechny pro případ, že se s tím v budoucnu setkáte.