I think this is now fixed in trunk. Please check it.

On Sunday, 23 December 2012 12:01:28 UTC-6, Andy Salnikov wrote:
>
> Hi Massimo,
>
> the problem happened with 2.1. I have just upgraded to 2.3.2 but I do not 
> see any change. Below are the request/response headers for the upload form 
> that results in validation failure. I tried to upload You can see that I 
> tried to upload an image (file size is 1,127,797 bytes), for that image 
> request Content-Length is 1,128,340 bytes but response is 3,445,392 bytes 
> (3 times large than request?)
>
> Let me know if I can provide more info for you.
>
> Thanks,
> Andy
>
>
>    1. Request URL:
>       http://127.0.0.1:8000/famtreepub/default/index
>       2. Request Method:
>       POST
>       3. Status Code:
>       200 OK
>       4. Request Headers
>          1. POST /famtreepub/default/index HTTP/1.1 Host: 
> 127.0.0.1:8000Connection: keep-alive Content-Length: 1128340 Cache-Control: 
> max-age=0 
>          Origin: http://127.0.0.1:8000 User-Agent: Mozilla/5.0 (Windows 
>          NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) 
> Chrome/23.0.1271.97 
>          Safari/537.11 Content-Type: multipart/form-data; 
>          boundary=----WebKitFormBoundarycW2MnFYBYRq4arq9 Accept: 
>          text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
> Referer: http://127.0.0.1:8000/famtreepub/default/index 
>          
> Accept-Encoding<http://127.0.0.1:8000/famtreepub/default/indexAccept-Encoding>:
>  
>          gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Accept-Charset: 
>          ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: 
>          session_id_admin=127.0.0.1-33b3e06f-388e-4f4b-ab89-a106d87c67c0; 
>          session_id_famtreepub=127.0.0.1-06dbb028-2086-4cc3-a568-77f069922d8c
>       5. Request Payload
>          1. ------WebKitFormBoundarycW2MnFYBYRq4arq9 Content-Disposition: 
>          form-data; name="input_file"; filename="drevo.jpg" Content-Type: 
> image/jpeg 
>          ------WebKitFormBoundarycW2MnFYBYRq4arq9 Content-Disposition: 
> form-data; 
>          name="output_type" OpenDocument 
> ------WebKitFormBoundarycW2MnFYBYRq4arq9 
>          Content-Disposition: form-data; name="_formkey" 
>          23e17674-c5fc-43a4-92e5-840cdd0598d4 
>          ------WebKitFormBoundarycW2MnFYBYRq4arq9 Content-Disposition: 
> form-data; 
>          name="_formname" input_data/create 
>          ------WebKitFormBoundarycW2MnFYBYRq4arq9-- 
>          6. Response Headers
>          1. HTTP/1.1 200 OK X-Powered-By: web2py Set-Cookie: 
>          
> session_id_famtreepub=127.0.0.1-06dbb028-2086-4cc3-a568-77f069922d8c; 
>          Path=/ Expires: Sun, 23 Dec 2012 16:42:55 GMT Pragma: no-cache 
>          Cache-Control: no-store, no-cache, must-revalidate, post-check=0, 
>          pre-check=0 Content-Type: text/html; charset=utf-8 Date: Sun, 23 Dec 
> 2012 
>          16:42:55 GMT Server: Rocket 1.2.6 Python/2.7.2 Content-Length: 
> 3445392 
>          Connection: keep-alive
>       
>
>
>
> On Thursday, December 20, 2012 11:27:36 PM UTC-8, Massimo Di Pierro wrote:
>>
>> Which web2py version? I believe this was fixed in 2.2 or 2.3.
>>
>> Massimo
>>
>> On Thursday, 13 December 2012 11:55:34 UTC-6, Andy Salnikov wrote:
>>>
>>> Hi, 
>>>
>>> I have an issue with the upload form and postbacks. In my application I 
>>> need to validate file contents before accepting it from user upload form, 
>>> so naturally I try to use "onvalidation" method to it. The table used in 
>>> the forma is defined like this:
>>>
>>> db.define_table('input_data',
>>>                 Field('input_file', 'upload', autodelete=True, 
>>> requires=IS_NOT_EMPTY(), label=T('Input file')),
>>>                 Field('output_type', default="xxx", 
>>> requires=IS_IN_SET(['xxx', 'yyy']), label=T('Output format')),
>>>                 Field('original_name', writable=False, readable=False),
>>>                 Field('created', 'datetime', writable=False, 
>>> readable=False),
>>>                 )
>>>
>>> My simplified action looks like this:
>>>
>>> def _validateFileForm(form):
>>>     try:
>>>         validator.validate(form.vars.input_file.file)
>>>         # on success set hidden fields
>>>         form.vars.original_name = request.vars.input_file.filename
>>>         form.vars.created = datetime.datetime.now()
>>>     except Exception, ex:
>>>         # if validation fails then display an error
>>>         form.errors.input_file = T('file_validation_failed') + ': ' + 
>>> str(ex)
>>>
>>> def index():
>>>
>>>     form = SQLFORM(db.input_data, submit_button=T("Upload"))
>>>     if form.process(onvalidation=_validateFileForm).accepted:
>>>         # save file id in a session and go to options page
>>>         session.input_data_id = form.vars.id
>>>         redirect(URL(options_odt))
>>>
>>>     return dict(form=form)
>>>
>>> Validation seems to work OK, if file is OK then everything is redirected 
>>> to next page, if file is bad then message is displayed in red under file 
>>> upload field. 
>>>
>>> What is interesting about it is that when validation fails and form is 
>>> re-displayed it also looks like that the whole file contents is send back 
>>> to the client together with the form. For large uploaded file this could be 
>>> a lot of data. I see long delays and when I check the HTTP response headers 
>>> I see many-megabytes number there. Is there a way to avoid sending the file 
>>> contents back with the form during a postback?
>>>
>>> Thanks,
>>> Andy
>>>
>>

-- 



Reply via email to