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.

Reply via email to