Jeśli chodzi o input[type=file], to nie ukrywaj go przez
display: none. Inaczej niczego tym nie osiągniesz, gdyż formularz nie zostanie wysłany z plikiem.
Aby osiągnąć efekt własnego przycisku, wpakuj element do jakiegoś diva, wycentruj w nim to pole do prawej krawędzi i obraz ustaw jako tło tego diva. I teraz trochę magii - ustawiasz maksymalną przezroczystość dla tego pola na plik, albo
visibility: hidden (choć nie pamiętam, jak to ostatnie działa; jeśli chodzi o pierwsze, to działa na pewno

).