2011-01-13 15 views
14

Tengo un problema con la carga de archivos. Quiero permitir a los usuarios cargar archivos que el sistema permite ...Restringir la carga de archivos a algunas extensiones de archivos

Por ejemplo, permito que los archivos que tengan una extensión de * .jpg sean cargados por los usuarios. Por lo tanto, en la ventana de selección de archivos, solo deben ver archivos con la extensión jpg.

¿Cómo puedo obtener esto en RoR?

Respuesta

8

La respuesta a esta pregunta probablemente esté más relacionada con la carga de html que los rieles.

Cuando quiere cargar un archivo, normalmente hace una entrada con type = "file".

Esto se puede hacer en Rails mediante el file_field_tag helper. Generará una entrada con type = "file" que también puede tener un atributo accept, pero realmente no se puede usar porque no va a tener ningún efecto visible. Este atributo acepta tipos MIME, no extensiones, y la mayoría de los navegadores ni siquiera lo usan.

Lo mejor que puede hacer es probablemente tener un javascript compruebe la extensión del archivo antes de cargarlo (después de seleccionar el archivo del cuadro de diálogo). Obtenga más información al respecto en this question.

El punto es que no puede obligar al sistema operativo a que le muestre solo las extensiones de archivo que desea. Usted puede validar la extensión mediante el uso de JS por ejemplo, antes de cargar o comprobar el contenido del archivo después de la carga, del lado del servidor

+1

Usar Javascript no es una buena idea porque se puede eludir fácilmente. Mejor ir con la validación del lado del servidor, p. como es compatible con Paperclip. –

+3

No recomiendo el uso de JavaScript para la validación, sino solo como una formalidad (me refiero a ... por qué alguien puede cargar una imagen con una extensión incorrecta). Si el usuario carga un archivo, incluso con la extensión requerida, es obvio que debe verificarse en el servidor. pero ese no es el problema aquí. la pregunta era si se puede validar antes de la carga (probablemente para ahorrar tiempo para cargar algo que no es válido. Al menos así es como lo veo) –

13

Con HTML5 se puede utilizar el: aceptar para limitar los tipos MIME, así:

<%= file_field_tag :csv_file, :accept => 'text/csv' %> 
+0

¿Qué es "csv_file?" ¿Está eso incorporado? – Jubl

+1

@Jubl no, ese es el nombre del campo. Eche un vistazo a la API http://apidock.com/rails/ActionView/Helpers/FormTagHelper/file_field_tag ​​ – Roger

+0

¿Cómo se aceptan varias extensiones de archivos? – Ctpelnar1988