我试图创建一个工人,上传文件附加事件处理程序,将更新我的html页面中的进度条。上传工作已经很好。
我知道web worker无法访问DOM对象,而DOM对象是我所有进度条所在的位置。所以,我想知道是否有解决办法?我想在worker中进行上传,但我也想进行进度跟踪。我将并行上传几个文件,所以,每个工人(上传)将有自己的进度条。这是可行的吗?或者我应该放弃网络工人完全选择不同的设计?
这是我工人体内的东西
onmessage = e => {
var xhr = new XMLHttpRequest();
xhr.addEventListener('progress', function(e) {
var done = e.position || e.loaded, total = e.totalSize || e.total;
console.log('xhr progress: ' + (Math.floor(done/total*1000)/10) + '%');
}, false);
if ( xhr.upload ) {
xhr.upload.onprogress = function(e) {
var done = e.position || e.loaded, total = e.totalSize || e.total;
console.log('xhr.upload progress: ' + done + ' / ' + total + ' = ' + (Math.floor(done/total*1000)/10) + '%');
};
}
xhr.onreadystatechange = function(e) {
if ( 4 == this.readyState ) {
console.log(['xhr upload complete', e]);
}
};
xhr.open('post', url, true);
xhr.setRequestHeader("Content-Type","multipart/form-data");
let formData = new FormData();
formData.append("thefile", e.data.payload);
xhr.send(formData)
}
我已经准备了一些事件处理程序,但目前,它只是日志。
谢谢
1条答案
按热度按时间ffscu2ro1#
onmessage
事件包含一个.source
属性。这是您将数据发送回客户端的方式。在您的progress事件侦听器中,您可以添加如下内容:不过要注意,您使用
e
作为onmessage处理程序数据和progress事件处理程序,我建议使这两个处理程序的名称唯一。然后在你的页面中你会听到这样的信息: