7

Estoy utilizando un formulario para cargar un archivo. Solo quiero cargar archivos PDF. Este es mi código:Validar la carga de archivos: Jquery y el atributo "Aceptar"

Un cuadro de entrada para permitir al usuario elegir un archivo:

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

y un lugar para mostrar el mensaje (s) Error:

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

El código generado para el campo de entrada es:

<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"> 

Ahora, incluso si elijo un archivo PDF, me sale un error Please enter a value with a valid extension.

Estoy usando MVC 3, y jquery discreto para validar el formulario.

+0

¿ha calculado esto? Tengo el mismo problema. Necesito aceptar varios tipos ("image/gif, image/png, image/jpeg"), en mi caso. –

+0

No, no. Tuve que eliminar el atributo "aceptar". Puede ser Validación Jquery no es compatible con la validación de tipo MIME para "aceptar". – escist

+0

@ThiagoSilva Para los tipos de imágenes, no debería ser un problema. ¿Has probado algo como 'accept =" image/gif, image/jpeg "'? – escist

Respuesta

7

El método de regla "accept" que está integrado en jQuery Validation toma valores en un formato que se asemeja a "jpg | png".

El atributo HTML "accept" toma un formato que se asemeja a "image/jpeg, image/png".

Parece que la validación jQuery y el estándar HTML son incompatibles a este respecto.

Aquí, puede leer más sobre jQuery Validation's "accept" rule y HTML5 "accept" attribute.

+1

El comportamiento del método "aceptar" cambió con la versión 1.10.0. Para detalles verifique mi respuesta. –

10

Tuve el mismo problema y tuve que recurrir a desactivar por completo la validación del atributo de aceptación. Agregué la línea siguiente a mi página y funcionó:

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

+0

Quiero que se valide el método de aceptación. – escist

+0

Gracias! Eso es todo lo que necesitaba. Solo estaba interesado en filtrar el archivo = abrir el cuadro de diálogo para archivos PDF. Tengo la intención de validar el archivo en el lado del servidor. – jkokorian

+1

¡Eso funcionó! ¡Gracias! -Edit- FYI, use la función anónima que se proporcionó para validar el artículo si es necesario. –

5

Si pones en ambos formatos aceptan como su atributo que debería funcionar

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

Se cambió el comportamiento del método "aceptar" con la versión 1.10.0. En lugar de verificar la extensión del archivo, ahora mira el tipo de mimo. El antiguo comportamiento ahora está disponible como el método de "extensión". Entonces solo tienes que actualizar tu versión del complemento de validación de jquery y listo. Reemplacé mi versión actual 1.9.0 con 1.11.0 y establecí los tipos de mime válidos como accept-attribut. Ahora está funcionando como se esperaba:

accept="image/*, application/pdf" 
Cuestiones relacionadas