2011-01-13 19 views
14

Sto riscontrando un problema con il caricamento dei file. Voglio consentire agli utenti di caricare file che il sistema consente ...Limita il caricamento del file ad alcune estensioni di file

Ad esempio, consento ai file di avere un'estensione di * .jpg caricati dagli utenti. Quindi, nella finestra di selezione dei file devono vedere solo i file con l'estensione jpg.

Come posso ottenere questo in RoR?

risposta

8

La risposta a questa domanda è probabilmente più correlata al caricamento HTML rispetto ai binari.

Quando si desidera caricare un file, in genere si digita un input con type = "file".

Questo può essere fatto in Rails utilizzando il file_field_tag helper. Genererà un input con type = "file" che può anche avere un attributo per l'attributo, ma non è possibile utilizzarlo perché non avrà alcun effetto visibile. Questo attributo accetta i tipi MIME, non le estensioni e la maggior parte dei browser nemmeno lo usa.

La cosa migliore che si può fare è probabilmente avere un javascript controllare l'estensione del file prima del caricamento (dopo aver selezionato il file dalla finestra di dialogo). Leggi di più a riguardo in this question.

Il punto è, non è possibile forzare il sistema operativo per mostrare solo le estensioni di file che si desidera. È possibile convalidare l'estensione utilizzando JS per esempio, prima di caricare o controllare il contenuto del file dopo il caricamento, lato server

+1

L'utilizzo di Javascript non è una buona idea perché può essere facilmente aggirato. Meglio andare con la convalida sul lato server, ad es. come supportato da Paperclip. –

+3

Non sto raccomandando l'uso di javascript per la convalida, ma solo come formalità (voglio dire ... perché consentire a qualcuno di caricare un'immagine con un'estensione errata). Se l'utente carica un file, anche con l'estensione richiesta, è ovviamente necessario controllarlo dal lato server. ma non è questo il problema qui. la domanda era se può essere convalidato prima del caricamento (probabilmente per risparmiare tempo per il caricamento di qualcosa che non è valido. almeno è così che lo vedo) –

13

Con HTML5 è possibile utilizzare il: accettare per limitare mime-type, in questo modo:

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

Che cos'è "csv_file?" È costruito? – Jubl

+1

@Jubl no, questo è il nome del campo. Dai un'occhiata all'API http://apidock.com/rails/ActionView/Helpers/FormTagHelper/file_field_tag ​​ – Roger

+0

Come accetteresti più estensioni di file? – Ctpelnar1988

Problemi correlati