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.
Styling & Customizing File Inputs the Smart Way
DigitalOcean provides cloud products for every stage of your journey. Get started with $200 in free credit!