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 >>>> >>> --