Styling & Customizing File Inputs the Smart Way
Osvaldas Valutis is right, using the <label> to trigger the native browser functionality is the way to go. Then style up the label as needed, enhancing with some JavaScript if you like. Same concept as the checkbox hack.
