Solo una sugerencia adicional para evitar el exceso de JavaScript aquí: si agrega una etiqueta y la etiqueta como el "botón de examinar" que desea tener, puede colocarla sobre el botón de búsqueda real proporcionado por el navegador u ocultar el botón de alguna manera diferente. Al hacer clic en la etiqueta, el comportamiento del navegador es abrir el cuadro de diálogo para buscar el archivo (no olvide agregar el atributo "para" en la etiqueta con el valor de la identificación del campo de entrada del archivo para que esto suceda). De esta forma, puede personalizar el botón de la forma que desee.
En algunos casos, puede ser necesario agregar un segundo campo de entrada o elemento de texto para mostrar el valor de la entrada del archivo y ocultar la entrada completamente como se describe en otras respuestas. Aún la etiqueta evitaría simular el clic en el botón de entrada de texto por JavaScript.
Por cierto, se puede usar un truco similar para personalizar casillas de verificación o botones de radio.agregando una etiqueta para ellos, al hacer clic en la etiqueta, se selecciona la casilla de verificación/botón de radio. El checkbox/radiobutton nativo puede ocultarse y reemplazarse por un elemento personalizado.
que respondió a una pregunta similar aquí: http://stackoverflow.com/a/37183065/882337 –