Это очень старый вопрос, но, к сожалению, этот вопрос все еще актуален и требует решения.
(Удивительно простое) решение, которое я придумал, заключается в том, чтобы «скрыть» поле ввода реального файла и обернуть его тегом LABEL (может быть улучшен для Bootstrap и HTML5).
See here:
Пример кода здесь
Таким образом, поле ввода реального файла невидимо, и все, что вы видите, это настраиваемая «кнопка», которая на самом деле является модифицированным элементом LABEL.
Когда вы щелкаете по этому элементу LABEL, появляется окно для выбора файла, и файл, который вы выбираете, переходит в поле ввода реального файла.
Кроме того, вы можете манипулировать внешним видом и поведением по своему усмотрению (например: получить имя выбранного файла из входного файла файла после выбранного и показать его где-нибудь. Элемент LABEL не подходит это автоматически, конечно. Обычно я просто помещаю его внутри LABEL, как его текстовое содержимое).
Осторожно, хотя! Манипулирование внешним видом и поведением ограничено тем, что вы можете себе представить и придумать. ;-); -)