7

Używam formularza do przesłania pliku. Chcę, aby przesyłano tylko pliki PDF. To jest mój kod:Sprawdzanie poprawności przesyłania plików - Jquery i atrybut "Accept"

okno wejściowe, aby umożliwić użytkownikowi wybrać plik:

@Html.FileBox(m => m.FileName, new { id = "FileName", accept = "application/pdf" }) 

i miejsce, aby wyświetlić komunikat o błędzie (s):

@Html.ValidationMessageFor(m=>m.FileName) 

kod generowany dla pole wejściowe jest:

<input id="FileName" type="file" name="FileName" data-val-required="The File Name field is required." data-val-length-max="512" data-val-length="The field File Name must be a string with a maximum length of 512." data-val="true" accept="application/pdf"> 

teraz nawet jeśli mam wybrać plik PDF, pojawia się błąd Please enter a value with a valid extension.

Używam MVC 3 i jokery unobstrusive do sprawdzania poprawności formularza.

+0

Czy wymyśliłeś ten jeden? Mam ten sam problem. W moim przypadku muszę zaakceptować wiele typów ("image/gif, image/png, image/jpeg"). –

+0

Nie, nie mam. Musiałem usunąć atrybut "accept". Może być Jquery Validation nie obsługuje sprawdzania poprawności typu MIME dla "accept". – escist

+0

@ThiagoSilva W przypadku typów zdjęć nie powinno to stanowić problemu. Czy wypróbowałeś coś w stylu 'accept =" image/gif, image/jpeg "'? – escist

Odpowiedz

7

Metoda "accept", która jest wbudowana w jQuery Validation, przyjmuje wartości w formacie przypominającym "jpg | png".

Atrybut "accept" HTML przyjmuje format przypominający "image/jpeg, image/png".

Wygląda na to, że jQuery Validation i standard HTML są niezgodne pod tym względem.

Tutaj możesz przeczytać więcej o jQuery Validation's "accept" rule i HTML5 "accept" attribute.

+1

Zachowanie metody "accept" zmieniono w wersji 1.10.0. Aby uzyskać szczegółowe informacje, sprawdź moją odpowiedź. –

10

Miałem ten sam problem i musiałem uciekać się, aby całkowicie wyłączyć sprawdzanie poprawności dla atrybutu accept. Dodałem następujący wiersz do mojej strony i zadziałało:

$ .validator.addMethod ('accept', function() {return true;});

+0

Chcę, aby metoda akceptacji została zatwierdzona. – escist

+0

Dzięki! To wszystko, czego potrzebowałem. Interesowało mnie tylko filtrowanie pliku file = open dialog dla plików pdf. Zamierzam zatwierdzić plik po stronie serwera. – jkokorian

+1

To zadziałało! Dzięki! -Edit- FYI, użyj anonimowej funkcji, która została podana do sprawdzenia poprawności elementu, jeśli potrzebujesz. –

5

Jeśli umieścisz oba formaty w swojej przyjąć jako atrybut powinien działać

accept="image/jpeg,image/png,jpg|png" 
7

Zmieniono zachowanie metody „Akceptuj” w wersji 1.10.0. Zamiast sprawdzać rozszerzenie pliku, wygląda teraz na typ MIME. Stare zachowanie jest teraz dostępne jako metoda "rozszerzenia". Musisz tylko zaktualizować wersję wtyczki sprawdzania poprawności jQuery i gotowe. Zastąpiłem obecną wersję 1.9.0 wersją 1.11.0 i ustawiono prawidłowe typy MIME jako accept-attribut. Teraz działa zgodnie z oczekiwaniami:

accept="image/*, application/pdf" 
Powiązane problemy