Implementacja przesyłania pliku w formacie HTML jest dość prosta, ale zauważyłem, że istnieje atrybut „Akceptuj”, który można dodać do <input type="file" ...>
tagu.
Czy ten atrybut jest przydatny jako sposób ograniczenia przesyłania plików do obrazów itp.? Jak najlepiej go używać?
Alternatywnie, czy istnieje sposób ograniczenia typów plików, najlepiej w oknie dialogowym pliku, dla znacznika wejściowego pliku HTML?
html
filter
cross-browser
mime-types
Darren Oster
źródło
źródło
input type="file"
sprawdzanie,accept
czy można wybierać tylko typy plików ed.Odpowiedzi:
Ten
accept
atrybut jest niezwykle przydatny. Jest to wskazówka dla przeglądarek, aby wyświetlać tylko pliki dozwolone dla bieżącegoinput
. Chociaż zwykle może być zastąpiony przez użytkowników, pomaga domyślnie zawęzić wyniki dla użytkowników, dzięki czemu mogą uzyskać dokładnie to, czego szukają, bez konieczności przeszukiwania setek różnych typów plików.Stosowanie
Uwaga: te przykłady zostały napisane w oparciu o bieżącą specyfikację i mogą nie działać w rzeczywistości we wszystkich przeglądarkach. Specyfikacja może również ulec zmianie w przyszłości, co może złamać te przykłady.
Ze specyfikacji HTML ( źródło )
źródło
accept='.jpg,.png,.gif,.pdf,.eps'
nie pozwoliłem na wybór. Próbowałem wielu odmian - rozdzielonych spacjami, bez kropek, itp., Ale bez kości w Chrome v20, więc skończyło się na użyciu typów MIME i zadziałało świetnie:accept='image/jpeg,image/gif,image/png,application/pdf,image/x-eps'
image/*
. Porażka.Value: A set of comma-separated strings, each of which is a valid MIME type, with no parameters.
tylko typy mimów. Brak rozszerzeń. Od klienta zależy określenie typu MIME.A string whose first character is a U+002E FULL STOP character (.) -- Indicates that files with the specified file extension are accepted.
video/*
oznacza, że nie możesz przesłać mp4 w Safari, musisz także określićvideo/mp4
Tak, jest to niezwykle przydatne w przeglądarkach, które go obsługują, ale „ograniczenie” jest dla wygody użytkowników (aby nie były przytłoczone nieistotnymi plikami), a nie jako sposób na uniemożliwienie im przesyłania rzeczy, których nie chcesz. przesyłanie.
Jest obsługiwany w
Oto lista typów zawartości, których można z nim używać, wraz z odpowiadającymi im rozszerzeniami plików (choć oczywiście można użyć dowolnego rozszerzenia pliku):
źródło
accept=".ttf"
działa zgodnie z oczekiwaniami.W 2015 roku jedynym sposobem , który sprawił, że działam zarówno w Chrome, jak i Firefox, jest umieszczenie wszystkich możliwych rozszerzeń, które chcesz obsługiwać, w tym wariantów:
Problem z Firefoksem : Używanie
image/jpeg
mima Firefox wyświetla tylko.jpg
pliki, bardzo dziwne, jakby to, co wspólne,.jpeg
nie było w porządku ...Cokolwiek zrobisz, koniecznie wypróbuj pliki z wieloma różnymi rozszerzeniami. Może to zależy nawet od systemu operacyjnego ... Wydaje mi się, że wielkość
accept
liter nie ma znaczenia, ale może nie w każdej przeglądarce.Oto dokumenty MDN dotyczące akceptacji :
źródło
Atrybut Accept został wprowadzony w RFC 1867 , w celu włączenia filtrowania typu pliku na podstawie typu MIME dla formantu wyboru pliku. Jednak od 2008 r. Większość przeglądarek, jeśli nie wszystkie, nie korzysta z tego atrybutu. Korzystając ze skryptów po stronie klienta, możesz dokonać pewnego rodzaju weryfikacji na podstawie rozszerzenia, aby przesłać dane poprawnego typu (rozszerzenie).
Inne rozwiązania do zaawansowanego przesyłania plików wymagają filmów Flash, takich jak SWFUpload lub apletów Java, takich jak JUpload .
źródło
Jest obsługiwany przez Chrome. Nie należy go używać do sprawdzania poprawności, ale do podpowiedzi systemu operacyjnego. Jeśli masz
accept="image/jpeg"
atrybut w przesyłanym pliku, system operacyjny może wyświetlać tylko pliki sugerowanego typu.źródło
accept="image/*"
działa na Firefox, Chrome i Opera.accept="text/plain"
zamiast tego.Minęło kilka lat, a Chrome przynajmniej korzysta z tego atrybutu. Ten atrybut jest bardzo przydatny z punktu widzenia użyteczności, ponieważ odfiltrowuje niepotrzebne pliki dla użytkownika, dzięki czemu jego wrażenia są płynniejsze. Jednak użytkownik nadal może wybrać „wszystkie pliki” z danego typu (lub w inny sposób ominąć filtr), dlatego zawsze należy sprawdzić poprawność pliku, w którym jest on rzeczywiście używany; Jeśli używasz go na serwerze, sprawdź go przed użyciem. Użytkownik zawsze może ominąć wszelkie skrypty po stronie klienta.
źródło
Jeśli przeglądarka korzysta z tego atrybutu, służy to jedynie jako pomoc dla użytkownika, więc nie prześle on pliku o wielkości wielu megabajtów, tylko po to, aby zobaczył, że został odrzucony przez serwer ... To
samo dla
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
tagu: jeśli przeglądarka go używa, nie wyśle pliku, ale wystąpi błąd powodujący błądUPLOAD_ERR_FORM_SIZE
(2) w PHP (nie jestem pewien, jak jest obsługiwany w innych językach).Uwaga: są to pomocne dla użytkownika . Oczywiście serwer musi zawsze sprawdzać typ i rozmiar pliku na swoim końcu: łatwo jest manipulować tymi wartościami po stronie klienta.
źródło
W 2008 roku nie było to ważne z powodu braku mobilnych systemów operacyjnych, ale teraz jest to dość ważna rzecz.
Po ustawieniu akceptowanych typów MIME, na przykład użytkownik Androida otrzymuje okno systemowe z aplikacjami, które mogą dostarczyć mu zawartość MIME, którą akceptuje wejście pliku, co jest świetne, ponieważ nawigacja po plikach w eksploratorze plików na urządzeniach mobilnych jest powolna i często stresująca .
Jedną ważną rzeczą jest to, że niektóre przeglądarki mobilne (oparte na wersji Chrome 36 na Androida i Chrome Beta 37) nie obsługują filtrowania aplikacji po rozszerzeniach i wielu typach MIME.
źródło