martes, 5 de julio de 2011

Guardar Imagen en Base de Datos - Grails

Bienvenido GF

Crear un aplicación en Grails que guarde una imagen

Descripción:
App de grails que guarde imágenes

Nivel: Básico

1
1.1
abrir consola cmd
1.2
ir al directorio donde se quiera crear la aplicación: en windows para navegar por directorios en consola se usa el comando cd.

2
Crear aplicación: una vez en el directorio deseado: escribir el siguiente comando:
grails create-app ImgsGrailsApp
2.2
escribir en la consola para entrar a la aplicación: cd ImgsGrailsApp

3
Crear clase de dominio: escribir en consola:
grails create-domain-class imagen
3.2
editar el archivo creado localizado en:
ImgsGrailsApp\grails-app\domain\imgsgrailsapp\Imagen.groovy

opcionalmente puedes abrir una interfaz grafica donde se editan comandos groovy
escribir el comando:
grails console
3.3
el archivo quedaría de la siguiente forma:

class Imagen {
Date lastUpdated
Date dateCreated
byte[] screenshot

static constraints = {
screenshot(maxSize:1073741824)
}
}

4
crear el controlador: escribir en consola:
grails create-controller imagen
4.2
editar el archivo creado localizado en:
ImgsGrailsApp\grails-app\controllers\imgsgrailsapp\ImagenController.groovy
4.3
añadimos el siguiente codigo:


def scaffold = Imagen


def showImage = {
def imagen = Imagen.get( params.id )
response.outputStream << imagen.screenshot
response.outputStream.flush()
}

5
generamos las vistas: escribir el comando:
grails generate-views imagen
nos creara los archivos de edición, crear, listar y mostrar de la clase Imagen
localizados en:
ImgsGrailsApp\grails-app\views\imagen
5.1
abrimos el archivo:
ImgsGrailsApp\grails-app\views\imagen\list.gsp
en este archivo esta lo que se va a mostrar cuando se vea la lista de imágenes
-vamos a la linea donde esta
<g:each in="${imagenInstanceList}" status="i" var="imagenInstance"> <tr class="${(i % 2) == 0 ? 'even' : 'odd'}"> <td>
- a partir de aquí modificamos este td y quedaría de la siguiente manera

<g:link action="show" id="${imagenInstance.id}">${fieldValue(bean: imagenInstance, field: "id")}
  <img width="20%" height="20%" alt="Img" src="http://localhost:8080/ImgsGrailsApp/imagen/showImage/${imagenInstance.id}">
</g:link>
5.2

abrimos el archivo:
ImgsGrailsApp\grails-app\views\imagen\show.gsp
en este archivo esta lo que se va a mostrar cuando se vea una de imágen
-vamos a la linea donde esta



<ol class="property-list imagen">
<g:if test="${imagenInstance?.screenshot}">
<li class="fieldcontain">
<span id="screenshot-label" class="property-label"><g:message code="imagen.screenshot.label" default="Screenshot" /></span>                                        



-a partir de aqui añadimos el siguiente código, quedaría antes de cerrar el li

<g:link action="showImage" id="${imagenInstance.id}">${fieldValue(bean: imagenInstance, field: "id")}
  <img alt="img" src="http://localhost:8080/ImgsGrailsApp/imagen/showImage/${imagenInstance.id}">
</g:link>

6
probamos la aplicación: escribimos el comando:
grails run-app

5 comentarios:

  1. bueno.... yo estoy empezando con el tema de grails... cuando inicias te da una base de datos en el que podes introducir datos, pero al cerrar el localhost se pierden los datos guardados en la wep... queria saber si puedo crear una base de datos que guarde los contenidos agregados desde el explorador wep...

    ResponderEliminar
  2. para cualquier cosa respondeme aqui ya que no suelo acceder a mi correo...

    ResponderEliminar
  3. Buen día A.J.L.R
    Si se puede crear la base de datos y tener los contenidos agregados cada vez que corras tu aplicación.
    en un post he hecho ese ejemplo para guardar los datos guardados.

    http://grailsfacilito.blogspot.com/2011/06/catalogo-clientes-app-grails-mysql.html

    ResponderEliminar
  4. Estimado... como sería la cuestión en lo relacionado a la subida de imágenes para que las mismas sean guardadas en un directorio local ... Gracias

    ResponderEliminar
  5. no olviden < g : form action="save" enctype = " multipart / form-data " >

    ResponderEliminar