2011-02-16 6 views
9

Soy un principiante de Grails, así que tengan paciencia conmigo. Actualmente estoy teniendo dificultades para manipular las cargas de archivos. Por lo que entiendo usando request.getFile() puedo obtener fácilmente la secuencia de bytes. Pero antes de hacer eso, quiero comprobar lo siguiente:Carga de archivos Grails: ¿cómo reconocer archivos y/o tipos de contenido?

  • nombre de archivo del archivo que se está subido
  • tamaño de archivo del archivo que se está subido
  • contenido/tipo de archivo del archivo que se ha subido

¿Cómo se puede hacer esto? ¿Es posible incluso antes de que el archivo se cargue en el servidor? Me gustaría bloquear la carga de archivos de gran tamaño.

+1

¿Usted está queriendo hacer esto en el front end o back end? –

Respuesta

19

Toda la información está contenida en el objeto CommonsMultipartFile al que puede convertir su parámetro de solicitud.

Se puede utilizar como que (en su controlador)

def uploaded = { 
    def CommonsMultipartFile uploadedFile = params.fileInputName 
    def contentType = uploadedFile.contentType 
    def fileName = uploadedFile.originalFilename 
    def size = uploadedFile.size 
} 

Por lo que el bloqueo de envío de archivos grandes, esto podría hacerse añadiendo lo siguiente a su formulario:

<INPUT name="fileInputName" type="file" maxlength="100000"> 

pero no todos los navegadores lo soportarán. El otro límite es el límite de carga del contenedor (consulte la configuración de Tomcat o el contenedor que esté utilizando).

Aparte de eso, debe verificar el tamaño y rechazarlo en el controlador.

+0

Todo esto provisto que está utilizando un simple formulario HTML. – mfloryan

+0

Excelente y útil respuesta. Me acabas de ahorrar un montón de tiempo. Gracias :)) –

+0

Esto me ayuda mucho, gracias por la respuesta – Motilal

0

O puede subir las propiedades del archivo directamente sin usar CommonsMultipartFile.

def ufile = request.getFile ("fileInputName")
println (ufile.contentType)
println (ufile.originalFilename)
println (ufile.size)