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()) {