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
image name, 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 <[email protected]> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.