Hi Massimo,

thanks, I checked out trunk version from today and it is indeed fixed now.

Happy holidays,
Andy

On Sunday, December 23, 2012 9:34:38 PM UTC-8, Massimo Di Pierro wrote:
>
> 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