2011-06-13 26 views

Respuesta

15

Como es, su modelo no va a almacenar la imagen en la base de datos - en su lugar, se almacenará la imagen en el sistema de archivos, con su nuevo nombre de archivo almacenado en la base de datos (en el campo 'imagen'). Si desea almacenar la imagen en sí misma en la base de datos, utilice la siguiente:

db.define_table('images', 
    Field('picture', 'upload', uploadfield='picture_file') 
    Field('picture_file', 'blob')) 

Ya sea que almacenar las imágenes en el sistema de archivos o en la base de datos, puede utilizar el mismo método para recuperarlos. La aplicación de andamiaje 'bienvenida' incluye la download() acción siguiente en el controlador de default.py:

def download(): 
    return response.download(request, db) 

Para recuperar una imagen, acaba de hacer algo como:

<img src="{{=URL('default', 'download', args=picture_name)}}" /> 

donde picture_name es el valor almacenado en el 'picture 'campo de la tabla' images 'para la imagen particular que desea recuperar.

Para obtener más información, consulte here y here.

Si necesita más ayuda, intente preguntar en el mailing list.

+0

Thx por la información ... no quiero decir realmente thx ... – Florin

+0

Hola Anthony, ¿cómo puedo guardar "blob" en un Key/Value Nosql storage? No pido detalles, solo una forma de hacerlo. ¡Gracias por adelantado! – Locke

+1

Si deseo utilizar el DAL, creo que el único almacén de clave/valor admitido es el almacén de datos de Google App Engine, y en ese caso, el DAL almacenará automáticamente los archivos en el almacén de datos (ni siquiera tiene que crear un archivo explícitamente). campo blob separado o especifique el argumento uploadfield).El DAL también tiene soporte parcial para MongoDB y CouchDB, aunque son bases de datos de documentos, y no estoy seguro de si DAL admite el almacenamiento de archivos en ellos. – Anthony

2

Como alternativa, si utiliza modo por defecto de web2py de subir las imágenes como archivos, puede utilizar:

En modelos:

db.define_table('images',Field('picture','upload')) 

En los controladores:

def somefunction(): 
    pic = db(db.images).select().first().picture #select first picture 
    return dict(pic=pic) 

Y en el valor por defecto /somefunction.html view:

{{extend 'layout.html'}} 
<img src="{{=URL('download', args=pic)}}" /> 

Sé que esto es un tiempo después de la pregunta original, pero pensé que podría ser útil, ya que me tomó un tiempo darme cuenta.

Cuestiones relacionadas