Thank you Sir. The information about table and file names was the key
information for a problem than I was trying to solve for a week and I
couldn't find it in the book. You have just saved my day.
Dragan
On Friday, February 8, 2013 2:41:51 PM UTC+1, Anthony wrote:
>
> The download() function calls response.download() to find and serve the
> file, and response.download() gets the database table and field names from
> the filename in the URL. SQLFORM.factory works by creating a dummy DAL
> instance with a dummy DAL Table, and by default it names that table
> "no_table", which is then used in constructing the filename, as you can see
> in the URL below. Of course, there is no "no_table" table, so
> response.download() can't find the file. To get around this problem, you
> can explicitly specify the name of the dummy table so it is the same as the
> name as the real table containing the upload field:
>
> form = SQLFORM.factory(
> Field('description', 'string'),
> Field('mypicture', 'upload', uploadfolder=os.path.join(request.
> folder, 'uploads/')),
> table_name='mypictures')
>
> With that change, the filenames will begin with "mypictures" instead of
> "no_table", and response.download() should then be able to locate the real
> database table and properly serve the file.
>
> Anthony
>
> On Friday, February 8, 2013 7:21:50 AM UTC-5, Dragan Matic wrote:
>>
>> Here is a model table for holding picture names:
>>
>> db.define_table('mypictures',
>> Field('description', 'string'),
>> Field('mypicture', 'upload'))
>>
>> If I try to upload a picture through simple SQLFORM everything works ok,
>> picture is renamed to something like
>> 'mypictures.mypicture.be0ff92956b815ab.70756c6933312e6a7067.jpg' and I can
>> show it in view.
>>
>> def SendPicture():
>> form=SQLFORM(db.mypictures)
>>
>> if form.accepts(request, session):
>> response.flash = "picture uploaded"
>>
>> return dict(form=form)
>> This is the created html and everything works ok, I can show it or
>> download it:
>> <img src=
>> "/showpics/default/download/mypictures.mypicture.be0ff92956b815ab.70756c6933312e6a7067.jpg"
>>
>> width="300" />
>>
>>
>> However if I try to upload a picture through SQLFORM.factory and then
>> insert values into database and then if I try to show it or download it
>> web2py responds with "400 not found" although picture is uploaded.
>>
>> def SendPicture():
>> form = SQLFORM.factory(
>> Field('description', 'string'),
>> Field('mypicture', 'upload', uploadfolder=os.path.join(request.
>> folder, 'uploads/')))
>>
>> if form.accepts(request, session):
>> response.flash = "picture uploaded"
>> db.mypictures.insert(description=form.vars.description, mypicture
>> =form.vars.mypicture)
>>
>> return dict(form=form)
>>
>> This is the html code created, picture is not shown and if I try to
>> download it, I get a '400 not found' response although the picture exists
>> on a given location.
>>
>> <img src=
>> "/showpics/default/download/no_table.mypicture.80201cf3260698b3.70756c695f73615f6a657a696b6f6d322e6a7067.jpg"
>>
>> width="300" />
>>
>>
>>
>>
>>
--
---
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/groups/opt_out.