Jak za pomocą HTML ograniczyć typy plików, które można przesyłać?
Aby ułatwić użytkownikom obsługę, chcę ograniczyć przesyłanie plików do samych obrazów (jpeg, gif, png).
<form method="post" action="..." enctype="multipart/form-data">
<label for="image">Photo</label>
<input name="image" type="file" />
</form>
html
image
upload
file-upload
JacobT
źródło
źródło
Odpowiedzi:
HTML5 mówi
<input type="file" accept="image/*">
. Oczywiście nigdy nie ufaj walidacji po stronie klienta: zawsze sprawdź ponownie po stronie serwera ...źródło
Plik wejściowy HTML5 ma atrybut akceptacji, a także atrybut wielokrotny. Używając wielu atrybutów, możesz przesłać wiele obrazów w jednej instancji.
Możesz także ograniczyć wiele typów MIME.
i inny sposób sprawdzania typu MIME przy użyciu obiektu pliku.
obiekt pliku podaje nazwę, rozmiar i typ.
Możesz również ograniczyć możliwość przesyłania niektórych typów plików przez użytkownika za pomocą powyższego kodu.
źródło
image/*|audio/*|video/*
nie działa dla mnie, wydaje się, że powinien być oddzielony przecinkami:image/*,video/mp4,.txt
Edytowano
Gdyby wszystko było tak, jak POWINNO, można to zrobić za pomocą atrybutu „Akceptuj”.
http://www.webmasterworld.com/forum21/6310.htm
Jednak przeglądarki prawie to ignorują, więc jest to nieodparte. Krótka odpowiedź brzmi: nie sądzę, aby można było to zrobić w HTML. Zamiast tego musiałbyś to sprawdzić po stronie serwera.
Poniższy starszy post zawiera informacje, które mogą pomóc w znalezieniu alternatyw.
Atrybut „accept” dla wejścia pliku - czy jest przydatny?
źródło
Oto kod HTML do przesłania obrazu. Domyślnie pokaże pliki graficzne tylko w oknie przeglądania, ponieważ umieściliśmy
accept="image/*"
. Ale nadal możemy to zmienić z listy rozwijanej i pokaże wszystkie pliki. Więc część JavaScript sprawdza, czy wybrany plik jest rzeczywistym obrazem.Tutaj w przypadku zmiany najpierw sprawdzamy rozmiar obrazu. W drugim
if
warunku sprawdzamy, czy jest to plik obrazu.this.files[0].type.indexOf("image")
będzie,-1
jeśli nie jest to plik obrazu.źródło
Teraz w części html
ten kod sprawdzi, czy przesłany plik jest plikiem jpg, czy nie, i ogranicza możliwość przesyłania innych typów
źródło
Możesz to zrobić tylko bezpiecznie po stronie serwera. Używanie atrybutu „accept” jest dobre, ale musi być również sprawdzone po stronie serwera, aby użytkownicy nie mogli cURLować do skryptu bez tego ograniczenia.
Proponuję: odrzucić wszystkie pliki niebędące obrazami, ostrzec użytkownika i ponownie wyświetlić formularz.
źródło
Ostatecznie filtr wyświetlany w oknie Przeglądaj jest ustawiany przez przeglądarkę. Możesz określić wszystkie żądane filtry w atrybucie Accept, ale nie masz gwarancji, że przeglądarka użytkownika będzie go przestrzegać.
Najlepszym rozwiązaniem jest przeprowadzenie pewnego rodzaju filtrowania na zapleczu serwera.
źródło
Pobierz projekt o nazwie Uploadify. http://www.uploadify.com/
Jest to program do przesyłania plików oparty na Flash + jQuery. Wykorzystuje to okno dialogowe wyboru plików Flash, które daje możliwość filtrowania typów plików, wybierania wielu plików w tym samym czasie itp.
źródło