So I inserted a console.log(data) after calling $.getJSON to see what data 
the ajax call would return as a large file is uploaded. It does return a 
json object containing 'length' and 'uploaded' but the values are always 
zero.

I also set X-Progress-ID and uuid to the same static test value and it 
resulted in the same problem.

I then tried removing this.action += ((this.action.indexOf('?') == -1) ? 
'?' : '&') + 'X-Progress-ID=' + uuid; and added a hidden input field named 
X-Progress-ID instead. Made no difference. No errors either, but cache.ram 
calls always return 0 values for both length and uploaded.

Can anybody help with this?

On Tuesday, July 1, 2014 2:00:33 PM UTC-4, cowbert wrote:
>
> I'm trying to do a simple manual file upload (without DAL) and display 
> progress bar. I would prefer not to use any ajax helpers.
> I'm trying to use the upload progress recipe (involving the cache.ram 
> tracking in copystream_progress).
>
> Here's my controller default.py:
> def index():
>     if request.extension=='json' and 'X-Progress-ID' in request.get_vars:
>         cache_key = 'X-Progress-ID:'+request.get_vars['X-Progress-ID']
>         length = cache.ram(cache_key+':length', lambda: 0, None)
>         uploaded = cache.ram(cache_key+':uploaded', lambda: 0, None)
>         from gluon.serializers import json
>         return json(dict(length=length, uploaded=uploaded))
>     else:
>         form = None
>         patherror = False
>         #some checking for a valid target path for later use
>         if not patherror:
>             #generate uuid
>             import binascii
>             myuuid = binascii.hexlify(os.urandom(24))
>             form=FORM(INPUT(_name='file', 
> _type='file'),INPUT(_type='submit', _value='Upload'))
>             #will do stuff to file upon form accepts
>         return dict(form=form, myuuid=myuuid)
>
>
> views/default/index.html:
>
> <script type="text/javascript">
> //Add upload progress for multipart forms
> jQuery(function() {
>     jQuery('form[enctype="multipart/form-data"]').submit(function() {
>         //only submit once per page load
>         if (jQuery.data(this,'submitted')) return false;
>         var freq = 1000; //update every n ms
>         var uuid = '{{=myuuid}}'; //myuuid was generated by the controller 
> above
>         //console.log(uuid);
>         var progress_url = '{{=URL(extension="json")}}';
>         //console.log(progress_url)
>         //Critical construct X-Progress-ID to request
>         this.action += ((this.action.indexOf('?') == -1) ? '?' : '&') + 
> 'X-Progress-ID=' + uuid;
>         var progress = jQuery(
>             '<div id="upload-progress" 
> class="upload-progress"></div>').insertAfter(
>                 jQuery('input[type="submit"]')).append(
>                     '<div class="progress-container"><span 
> class="progress-info">uploading 0%</span><div 
> class="progress-bar"></div></div>');
>         jQuery('input[type="submit"]').remove()
>         
> progress.find('.progress-bar').height('1em').width(0).css("background-color","red");
>         //func to update progress bar
>         function update_progress_info() {
>             progress.show()
>             jQuery.getJSON(progress_url, {'X-Progress-ID':uuid, 'dummy': 
> 'xmlhttprequest fix for IE'}, function(data, status) {
>                 if (data) {
>                     var progress_percent = parseInt(data.uploaded) / 
> parseInt(data.length);
>                     var width = 
> progress.find('.progress-container').width();
>                     var progress_width = width * progress_percent;
>                     progress.find('.progress-bar').width(progress_width);
>                     progress.find('.progress-info').text('uploading ' + 
> progress_percent * 100 + '%');
>                 }
>                 window.setTimeout(update_progress_info, freq);
>             });
>         };
>         window.setTimeout(update_progress_info, freq);
>         jQuery.data(this, 'submitted', true); //finaly mark form as 
> submitted
>     });
> });
> </script>
> {{=form}}
>
> I am getting no javascript errors but i get no progress bar and the 
> progress-info span doesn't update either. File uploads.
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
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/d/optout.

Reply via email to