Actually, I've created this form factory to upload 1 to 4 images at the same time and that's why I named the field "image_1", "image_2", ... After form passes validation, I manually insert the file in db.imagebiens table. The new file name being stored in image field. So how can I achieve this functionality and render the image file with download function ? Should I go for multiple form to upload each file or give the view the direct link to the image ?
Tiana Le mardi 20 mai 2014 16:53:15 UTC+3, Anthony a écrit : > > The problem is that in your factory form, you named the field "image_1", > which then gets included in the filename, but in your actual db.imagebiens > table, the field name is "image". When the download function receives the > filename, it assumes the "imagebiens.image_1" prefix refers to table and > field name. It then checks that Field object in order to figure out its > associated uploadfolder. Of course, because there is no > db.imagebiens.image_1 field, this lookup fails. > > Anthony > > On Tuesday, May 20, 2014 7:22:58 AM UTC-4, Tiana A. Ralijaona wrote: >> >> Hi everybody, >> >> I manually uploaded file via SQLFORM.factory too and the file has been >> uploaded using the excerpt below : >> >> forma = SQLFORM.factory( >> Field("image_1", "upload", uploadfield=True, >> uploadfolder=os.path.join(request.folder,'uploads/'), ...), ..., >> table_name="imagebiens") >> ... >> if forma.validate(): >> if forma.vars.image_1: >> db.imagebiens.insert(**dict(image=forma.vars.image_1, bienid= >> bien.id)) >> ... >> It works. I can find the file renamed in the uploads folder. >> But now, I want to render the file in a view like this : >> >> <p> >> {{for sary in limagebien:}} >> <img src="{{=URL("default", "download", args=sary.image)}}" >> width="96" height="96"> >> {{pass}} >> </p> >> >> >> which is rendered in html like this : >> >> <p> <img >> src="/maloca/default/download/imagebiens.image_1.a8e26134c9014d3a.6372756e636862616e672e706e67.png" >> width="96" height="96"> <img >> src="/maloca/default/download/imagebiens.image_1.b24410c2dae27017.6372756e636862616e672d666c616d65732d776964652d62792d6f6d6e732e6a7067.jpg" >> width="96" height="96"> </p> >> >> >> The problem is that the image doesn't appear. The download action seems >> not to be capable to render it. Has anyone an idea where in this code the >> problem comes from? >> >> Thanks in advance >> >> Le jeudi 6 octobre 2011 01:55:20 UTC+3, TheSweetlink a écrit : >>> >>> Hello Alex, >>> >>> Two things I've found when manually uploading via SQLFORM.factory: >>> >>> 1) You need to specify a table_name='...' to avoid the >>> no_table_newfilename.extension issue like this: >>> >>> form = SQLFORM.factory(...Field definitions..., >>> table_name='some_table_name') >>> >>> 2) Additionally you must specify an uploadfolder in your upload Field >>> definition similar to this: >>> >>> form = SQLFORM.factory(..., >>> Field('invoice_logo', type='upload', >>> uploadfolder=os.path.join(request.folder,'static/uploads/')), >>> ..., table_name='whatever_you_like') >>> >>> **NOTE** 'static/uploads' is just an example, you can upload to >>> wherever it will be appropriate. >>> >>> In this case the newly uploaded and renamed file to >>> your_application's_dir/static/uploads/your_new_filename_here >>> >>> One gotcha to look out for following your field name as an example >>> without the quotation marks: >>> >>> In your form.accepts(...): >>> >>> "request.vars.invoice_logo" will contain the original filename of your >>> upload whereas >>> >>> "form.vars.invoice_logo_newfilename" will contain the newly renamed >>> file like yourtablename.9203842903.thaoeu09gu023hgda3p.ext >>> >>> No need to call store() directly as SQLFORM.factory will take care of >>> that for you. >>> >>> I hope that this helps you. >>> >>> -David Bloom >>> >>> On Oct 4, 7:53 pm, Alex <mrauc...@gmail.com> wrote: >>> > Hi, >>> > >>> > I've already spent quite some time with the following problem which I >>> > think should be fairly easy. I hope someone can help me. >>> > >>> > # model >>> > db.define_table('admin_setting', >>> > Field('name', 'string', notnull=True), >>> > Field('value', 'string', notnull=True)) >>> > >>> > in the controller I'm creating a form for various admin settings. >>> > form = SQLFORM.factory( >>> > Field('invoice_logo', 'upload'), ...) >>> > >>> > the view works well and displays all fields. >>> > >>> > When uploading a file for the logo the file should be handled like >>> > always (file uploaded to uploads folder, renamed to uuid filename). in >>> > the table admin_setting I want to store the filename of the uploaded >>> > file in a row where name='invoice_logo' (the filename should be stored >>> > in the value field). >>> > >>> > How can I achieve this? currently I have this code (the update is >>> > performed later and not shown here): >>> > if form.accepts(request.vars, formname='admin_setting_form', >>> > dbio=False): >>> > if request.vars.invoice_logo != None: >>> > if type(request.vars.invoice_logo) != str: >>> > request.vars.invoice_logo_filename = >>> > request.vars.invoice_logo.filename >>> > field = Field('invoice_logo', 'upload') >>> > # field.store fails because field does not have a _tablename >>> > uploaded_file = field.store(request.vars.invoice_logo.file, >>> > request.vars.invoice_logo.filename) >>> > else: >>> > del request.vars.invoice_logo # do not delete existing logo >> >> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.