2012-01-11 4 views
16

En mi modelo:¿Cómo validar el tipo de contenido de archivo a pdf, palabra, excel y texto sin formato para clip?

has_attached_file :uploaded_file, 
         :url => "/policy_documents/get/:id", 
         :path => "/public/policy_documents/:id/:basename.:extension" 

    validates_attachment_size :uploaded_file, :less_than => 10.megabytes  
    validates_attachment_presence :uploaded_file 
    validates_attachment_content_type :uploaded_file, :content_type =>['application/pdf', 'application/xlsx'], 
                 :message => ', Only PDF, EXCEL, WORD or TEXT files are allowed. ' 

Y después de esto, se puede cargar sólo los documentos PDF, Excel o no palabra o texto docs. Por favor, ayúdame donde estoy perdido!

Respuesta

42

No sé si se ha resuelto este por sí mismo, pero se echa en falta tipos MIME para los documentos que desea manejar trate de cambiar a :content_type:

:content_type => ["application/pdf","application/vnd.ms-excel",  
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
      "application/msword", 
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
      "text/plain"] 

O utilizar una validación personalizada

validate :correct_content_type, :message => ", Only PDF, EXCEL, WORD or TEXT files are allowed." 


def correct_content_type 
    acceptable_types = ["application/pdf","application/vnd.ms-excel",  
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
      "application/msword", 
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
      "text/plain"] 
    acceptable_types.include? uploaded_file.content_type.chomp 
end 
2

Esto es en realidad depende de comandos 'archivo' sus servidores. Lo que ese comando le devuelve es lo que debe aceptar en las validaciones del clip.

Por ejemplo, mi servidor Debian devuelve "application/msword" para un archivo xls. Y para un archivo xlsx da "application/zip".

Actualmente tengo estos para aceptar archivos xls y xlsx.

validates_attachment_content_type :file, :content_type => %w(application/zip application/msword application/vnd.ms-office application/vnd.ms-excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) 
0

Para cualquier archivo si está cargando, si usted no sabe el tipo de contenido de ese medio, la carga de pagar con ese documento en sí, y después de esto, y comprueba en el registro de desarrollo (o terminal), que content_type es ... luego cambia ese content_type en tu aplicación.

Cuestiones relacionadas