I found a work around to solve this problem

I added these 3 lines after form accepted

                if request.env.web2py_runtime_gae:
                    request.vars.file.file.seek(0)
                    form.vars.file_blob = request.vars.file.file.read()


Cause file_blob was None, I just set it.

This thread was helpful.
https://groups.google.com/forum/?fromgroups=#!search/%5Bweb2py%5D$20Re:$20Uploading$20Excel$20and$20reading$20from$20it/web2py/3wKcHVPBFI0/IobcR5OGcu8J



2012년 8월 21일 화요일 오후 2시 13분 37초 UTC+9, JungHyun Kim 님의 말:
>
>
> I opend the ticket.
>
>  Issue 948 
> <http://code.google.com/p/web2py/issues/detail?id=948>:SQLFORM.factory 
> + Multiple Tables + Upload Field + GAE Blob Problem
> Thank you Massimo.
>
> 2012년 8월 21일 화요일 오후 12시 25분 57초 UTC+9, Massimo Di Pierro 님의 말:
>>
>> Please open a ticket about this.
>>
>> On Monday, 20 August 2012 11:49:14 UTC-5, JungHyun Kim wrote:
>>>
>>> Hello!
>>>
>>> I have a problem with upload field.
>>>
>>> I tried to upload a file through one form with two tables using 
>>> SQLFORM.factory.
>>> It worked OK on web2py rocket server. But with GAE server (both local 
>>> test server and real GAE server), I can't upload files.
>>> The problem is blob is None after uploaded.
>>>
>>> I defined two tables.
>>>
>>>
>>>
>>> db.define_table('mibmessage',
>>>                     Field('user',db.auth_user,writable=False,readable=
>>> False,default=auth.user_id,),
>>>                     Field('message','text',notnull=True,
>>>                             widget = lambda field, value: SQLFORM.
>>> widgets.text.widget(field, value, _class='my-string')),
>>>                     Field('attached_files','list:reference 
>>> attached_file', writable=False, default=[], readable=False),
>>>                 )
>>>
>>> db.define_table('attached_file',
>>>                     Field('file','upload'),
>>>                     Field('original_filename', writable=False, notnull=
>>> False),
>>>                     Field('mibmessage',db.mibmessage),
>>>                 )
>>>
>>>
>>>
>>> And in controller, I saved them.
>>>
>>>    # Make a form
>>>     form =  SQLFORM.factory(db.mibmessage, db.attached_file, table_name=
>>> 'attached_file')
>>>     
>>>     # Save New Message
>>>     if form.process().accepted:
>>>         try:
>>>             # Insert a message
>>>             message_id = db.mibmessage.insert(**db.mibmessage.
>>> _filter_fields(form.vars))
>>>             form.vars.mibmessage=message_id
>>>             
>>>             if form.vars.file != '':
>>>                 form.vars.original_filename = request.vars.file.filename
>>>                 # Insert an attached file
>>>                 image_file_id = db.attached_file.insert(**db.
>>> attached_file._filter_fields(form.vars))
>>>                
>>>                 # The message has a list of attached files
>>>                 db.mibmessage[message_id].update_record(attached_files=[
>>> image_file_id])
>>>                 db.commit()
>>>
>>>         except Exception:
>>>             db.rollback()
>>>
>>>
>>> After uploaded, both rows are created. But  'file_blob' field of the 
>>> 'attached_file' is None.
>>>
>>> If I upload an file using SQLFORM with single table (attached_file), it 
>>> is OK.
>>>
>>> Did I use SQLFORM.factory wrong?
>>>
>>> I read this thread ( 
>>> https://groups.google.com/forum/?fromgroups#!searchin/web2py/SQLFORM.factory$20one$20form$20multiple$20tables$20blob/web2py/O6D1J8h_MNA/lmFbEF1XzWcJ%5B1-25%5D),
>>>  
>>> but I couldn't understand it. 
>>>
>>>
>>>
>>>
>>>
>>>

-- 



Reply via email to