Como descargar archivo guardado en BD

122 views
Skip to first unread message

Roberto Tello

unread,
May 23, 2012, 4:03:49 PM5/23/12
to web2py-usuarios
Holas, tengo una bd definida con un campo tipo upload, en el cual se
guarda un archivo de cualquier tipo, si veo la BD lo muestra como
"file".

Ahora necesito descargar ese archivo desde un link y no puedo!!! ya no
se me ocurre como más hacerlo, intenté como sale explicado en el libro
con una imagen http://www.latinuxpress.com/books/drafts/web2py/caps/cap3.html
pero no hubo caso.

En la vista tengo :

<td height='20' style="vertical-
align:middle">{{=LI(A(tarea.descripcion, _href=URL("download",
args=tarea.archivo)))}}</td>

tarea.archivo es la columna del archivo en mi bd tarea.


En el controlador tengo:

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


Cuando entro a la pantalla donde muestra el supuesto link para
"descargar" el archivo, hago click en él, se demora un poco en cargar
y me manda a una pagina en blanco con "Invalid Request".


Alguna idea de como puedo descargar un archivo cargado en la bd en un
campo tipo upload?? Por favor es urgente... he estado pegado en esto
todo el día y no hay ningun ejemplo claro en "san" google.


Desde ya muchas gracias estimados.

Saludos

Martín Mulone

unread,
May 23, 2012, 4:09:28 PM5/23/12
to web2py-...@googlegroups.com
existe la url?

Próba cambiando el url por el siguiente:

_href=URL("default", "download",  args=tarea.archivo)
--

Roberto Tello

unread,
May 23, 2012, 4:34:43 PM5/23/12
to web2py-...@googlegroups.com
Hola, muchas gracias por tu respuesta compañero.

....No, no existía porque en el libro decía que para download no era
necesario crear una vista, de todas formas creé la vista
default/download con nada dentro.

Cambie la referencia a como me dijiste, pero igual no descarga el
archivo. Noté que ahora la URL a la que se va es:

http://127.0.0.1:8000/controltarea/default/download/FieldStorage%28%27archivo%27%2C%20%27cliente.jpeg%27%2C%20%27%5Cxff%5Cxd8%5Cxff%5Cxe0%5Cx00%5Cx10JFIF%5Cx00%5Cx01%5Cx01%5Cx00%5Cx00%5Cx01%5Cx00%5Cx01%5Cx00%5Cx00%5Cxff%5Cxdb%5Cx00%5Cx84%5Cx00%5Ct%5Cx06%5Cx06%5Cx10%5Cx10%5Cx10%5Cx12%5Cx10%5Cx0f%5Cx0f%5Cx10%5Cx10%5Cx10%5Cx0f%5Cx10%5Cx0e%5Cx14%5Cx10%5Cx10%5Cx14%5Cx0f%5....................................
infinitos caracteres del mismo tipo.

= invalid request (obvio)

Osea al poner la referencia en la vista como :

{{=LI(A(tarea.descripcion, _href=URL("default", "download",>>
args=tarea.archivo)))}}

me está tomando tarea.archivo tal cual de la BD como texto y lo
utiliza como referencia a donde ir, entonces, ¿como lo hago para que
descargue el archivo???????

Saludos






El día 23 de mayo de 2012 16:09, Martín Mulone
<mulone...@gmail.com> escribió:

Roberto Tello

unread,
May 23, 2012, 5:19:38 PM5/23/12
to web2py-usuarios
Ayuda por favor, sigo leyendo e investigando y nada funciona....







On 23 mayo, 16:34, Roberto Tello <tellorobe...@gmail.com> wrote:
> Hola, muchas gracias por tu respuesta compañero.
>
> ....No, no existía porque en el libro decía que para download no era
> necesario crear una vista, de todas formas creé la vista
> default/download con nada dentro.
>
> Cambie la referencia a como me dijiste, pero igual no descarga el
> archivo. Noté que ahora la URL a la que se va es:
>
> http://127.0.0.1:8000/controltarea/default/download/FieldStorage%28%2.......................................
> infinitos caracteres del mismo tipo.
>
> = invalid request (obvio)
>
> Osea al poner la referencia en la vista como :
>
> {{=LI(A(tarea.descripcion, _href=URL("default", "download",>>
> args=tarea.archivo)))}}
>
> me está tomando tarea.archivo tal cual de la BD como texto y lo
> utiliza como referencia a donde ir, entonces, ¿como lo hago para que
> descargue el archivo???????
>
> Saludos
>
> El día 23 de mayo de 2012 16:09, Martín Mulone
> <mulone.mar...@gmail.com> escribió:
>
>
>
>
>
>
>
> > existe la url?
>
> > Próba cambiando el url por el siguiente:
>
> > _href=URL("default", "download",  args=tarea.archivo)
>
> > El 23 de mayo de 2012 17:03, Roberto Tello <tellorobe...@gmail.com>

Martín Mulone

unread,
May 23, 2012, 5:41:20 PM5/23/12
to web2py-...@googlegroups.com
Poné el modelo y algo más del código de tu aplicación.
--

Roberto Tello

unread,
May 23, 2012, 6:21:29 PM5/23/12
to web2py-usuarios
Modelo:

db.define_table('tarea',
Field('creador',db.auth_user),
Field('responsable','string',length=100),
Field('fch_ini','datetime'),
Field('fch_est','datetime'),
Field('fch_fin','datetime'),
Field('descripcion','string', length=200),
Field('area',db.area),
Field('categoria',db.tarea_cat),
Field('tipo',db.tarea_tipo),
Field('subtipo',db.tarea_subtipo),
Field('estado',db.tarea_estado),
Field('archivo', 'upload', requires=IS_LENGTH(500*1024),
default=''))

además agregué esto por ahí, no se para que sirve:

crud.settings.download_url = URL('download')


Vista:
En la que cargo y grabo el archivo: default/tarea_nueva
<td height='30' style="vertical-align:middle"><input id="archivo"
name="archivo" valign="middle" type="file" value="" style="font-size:
12px; height:20px; width:250px; vertical-align:middle;"/></td>


En la que quiero descargar el archivo: default/detalle_tarea
<td height='20' style="vertical-
align:middle">{{=LI(A(tarea.descripcion,
_href=URL("default","download", args=tarea.archivo)))}}</td>

La vista default/download:
Creada vacía

Controlador:
def download():
"""
allows downloading of uploaded files
http://..../[app]/default/download/[filename]
"""
return response.download(request,db)

Y como expliqué anteriormente cuando hago click en el supuesto enlace
para descargar el archivo se va a la URL:

http://127.0.0.1:8000/controltarea/default/download/FieldStorage%28%27archivo%27%2C%20%27cliente.jpeg%27%2C%20%27%5Cxff%5Cxd8%5Cxff%5Cxe0%5Cx00%5Cx10JFIF%5Cx00%5Cx01%5Cx01%5Cx00%5Cx00%5Cx01%5Cx00%5C..............
etc.....


Si consulto la tabla tarea:
tarea.id tarea.creador tarea.responsable tarea.fch_ini tarea.fch_est
tarea.fch_fin tarea.descripcion tarea.area tarea.categoria tarea.tipo
tarea.subtipo tarea.estado tarea.archivo
27 rtello No Asignado 2012-05-23 18:18:37 2000-01-01 00:00:00
2000-01-01 00:00:00 Tarea 3 1 1 0 1 1 file

tarea.archivo = file, lo muestra de esa forma, si hago click sobre
file me da invalid request porque se va a la URL:
http://127.0.0.1:8000/controltarea/appadmin/download/db/FieldStorage('archivo',%20'cliente.jpeg',%20'/xff/xd8/xff/xe0/x00/x10JFIF/x00/x01/x01/x00/x00/x01/x00/x01/x00/x00/xff/xdb/x00/x84/x00/t/x06/x06/x10/x10/x10/x1...............etc...........etc.....................')


No se que más información puedo dar.

Saludos






On 23 mayo, 17:41, Martín Mulone <mulone.mar...@gmail.com> wrote:
> Poné el modelo y algo más del código de tu aplicación.
>

Martín Mulone

unread,
May 23, 2012, 6:39:49 PM5/23/12
to web2py-...@googlegroups.com
Lee el capitulo http://web2py.com/books/default/chapter/29/7 y buscá 

SQLFORM and uploads

Lo que tenés que hacer es que en controllers/default.py tener algo así:

def tarea_nueva():   
form = SQLFORM(db.tarea)
if form.process().accepted:
response.flash = 'form accepted'
elif form.errors:
response.flash = 'form has errors'
return dict(form=form)

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

Martín Mulone

unread,
May 23, 2012, 6:41:28 PM5/23/12
to web2py-...@googlegroups.com
Lee el capitulo http://web2py.com/books/default/chapter/29/7 y buscá 

SQLFORM and uploads

Lo que tenés que hacer es que en controllers/default.py tener algo así:

def tarea_nueva():   
form = SQLFORM(db.tarea)
if form.process().accepted:
response.flash = 'form accepted'
elif form.errors:
response.flash = 'form has errors'
return dict(form=form)

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




El 23 de mayo de 2012 19:21, Roberto Tello <tellor...@gmail.com> escribió:



--

Roberto Tello

unread,
May 23, 2012, 9:16:09 PM5/23/12
to web2py-...@googlegroups.com
Gracias Martín, lo probaré ahora..

El día 23 de mayo de 2012 18:41, Martín Mulone
<mulone...@gmail.com> escribió:

Roberto Tello

unread,
May 23, 2012, 11:30:09 PM5/23/12
to web2py-...@googlegroups.com
No funciono, la idea es no usar SQLForm.

Gracias de todas formas..



El día 23 de mayo de 2012 21:16, Roberto Tello
<tellor...@gmail.com> escribió:
Message has been deleted

nicolás rosbaco

unread,
Apr 18, 2017, 12:36:14 PM4/18/17
to web2py-...@googlegroups.com

Podrá ser que falta el nombre del controlador?

Estoy con el celu, pero veo q la url sólo refiere el nombre de la acción (la vista download). En una de esas falta agregar default, q seria el controlador de esa acción.

Sigo leyendo.... chiflen como sigue

posiblemente apurado, sea indulgente: escribo desde el celu

Juan Carlos

unread,
Apr 18, 2017, 3:52:02 PM4/18/17
to web2py-usuarios
Si tu respuesta es para mí, me he dado cuenta que había revivido un tema antiguo y he borrado el mensaje, disculpa.
Respecto a las descargas, mi problema lo he solucionado tal y como dices, curiosamente en local me funcionaba correctamente y al subirlo me ha salido el error. 

Muchas gracias, saludos.

nicolás rosbaco

unread,
Apr 18, 2017, 3:56:41 PM4/18/17
to web2py-...@googlegroups.com
Hola Juan Carlos, si era para vos.
Note algo extraño en el correo, iniciaba con {Dsarmed}, no observé la fecha...
Saludos!!!!




--
Has recibido este mensaje porque estás suscrito al grupo "web2py-usuarios" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuarios+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages