@@ -1582,6 +1582,18 @@ def set_internal_js(self, app_identifier, net_interface_ip, pending_messages_que
1582
1582
Remi.prototype.uploadFile = function(widgetID, eventSuccess, eventFail, eventData, file){
1583
1583
var url = '/';
1584
1584
var xhr = new XMLHttpRequest();
1585
+ xhr.upload.addEventListener('progress', function(e) {
1586
+ console.log('progress!', widgetID, %(emitter_identifier)s, e.loaded, e.total);
1587
+ if(event.lengthComputable){
1588
+ var params={};
1589
+ params['filename'] = 'filename'/* file.name*/;
1590
+ params['loaded'] = event.loaded;
1591
+ params['total'] = event.total;
1592
+ console.log("length is computable; sending callback");
1593
+ remi.sendCallbackParam(widgetID,'onprogress',params);
1594
+ }
1595
+ });
1596
+
1585
1597
var fd = new FormData();
1586
1598
xhr.open('POST', url, true);
1587
1599
xhr.setRequestHeader('filename', file.name);
@@ -1599,6 +1611,7 @@ def set_internal_js(self, app_identifier, net_interface_ip, pending_messages_que
1599
1611
console.log('upload failed: ' + file.name);
1600
1612
}
1601
1613
};
1614
+
1602
1615
fd.append('upload_file', file);
1603
1616
xhr.send(fd);
1604
1617
};
@@ -4120,6 +4133,17 @@ def ondata(self, filedata, filename):
4120
4133
f .write (filedata )
4121
4134
return (filedata , filename )
4122
4135
4136
+ @decorate_set_on_listener ("(self, emitter, filename, loaded, total)" )
4137
+ @decorate_event
4138
+ def onprogress (self , filename , loaded , total ):
4139
+ """
4140
+ Args:
4141
+ filename (str): the file name that is uploading
4142
+ loaded (int): loaded bytes
4143
+ total (int): file size in bytes
4144
+ """
4145
+ return (filename , int (loaded ), int (total ))
4146
+
4123
4147
4124
4148
class FileDownloader (Container , _MixinTextualWidget ):
4125
4149
"""FileDownloader widget. Allows to start a file download."""
0 commit comments