grails groovy classcastexception

grails - Excepción de elenco de clase en Groovy



classcastexception (3)

¿Puedes intentar usar Spring''s MultipartFile dentro de tu método loadPost() ?

Aquí hay un ejemplo de los documentos :

def upload = { def f = request.getFile(''myFile'') if(!f.empty) { f.transferTo( new File(''/some/local/dir/myfile.txt'') ) response.sendError(200,''Done''); } else { flash.message = ''file cannot be empty'' render(view:''uploadForm'') } }

Creo que puedes acceder a f.bytes directamente.

Quiero subir una imagen usando un groovy en los griales. Mi página gsp es la siguiente (estoy mostrando una versión simplificada del original)

<g:form controller="post" action="save" enctype="multipart/form-data"> My picture <input type="file" name="myPicture" /> <g:submitButton name="submit" value="Save"/> </g:form>

Mi clase de dominio es la siguiente:

class Post { byte[] myPicture static mapping = { myPicture type: "blob" }

Necesito esta asignación, de lo contrario MySql creará un pequeño bloque que es demasiado pequeño para adaptarse a las imágenes

static constraints = { myPicture(nullable:false) } }

En el controlador tengo una acción llamada guardar, que es la siguiente:

def save = { def post = loadPost(params.id) post.properties = params if(post.save()) { print "hallo world" redirect(action:''list'', params:params) } else { render(view:''edit'', model:[post:post]) } }

La excepción se produce cuando intento guardar la imagen en el DB.

2009-04-27 18:16:07,319 [20806951@qtp0-0] ERROR errors.GrailsExceptionResolver - java.lang.ClassCastException: [B cannot be cast to java.sql.Blob

org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.ClassCastException: [B no se puede convertir a java.sql.Blob

¿Alguna pista de por qué es esto?

Por cierto, he visto en un tutorial que las imágenes se manejan como cadenas, pero no funcionó tan bien.


Encontré una pregunta similar sobre Nabble:

http://www.nabble.com/MySQL-and-Blobs-td16116885.html

Se sugieren dos posibles soluciones:

  • Cambie las restricciones de la propiedad de blob a un tamaño máximo grande, para evitar que use "TinyBlob".
  • Utilice la implementación de Hibernate Blob en lugar de byte [] para la declaración de tipo de la propiedad. Esto requerirá que se transmitan datos al Blob, en lugar de la asignación directa, pero la publicación anterior proporciona el código para hacerlo.

intente de esta manera:

def save = { def post = loadPost(params.id) def f = request.getFile(''myPicture'') post.myPicture = f.getBytes() post.pictureType = f.getContentType() if(post.save()) {