我正在使用以下JavaScript将文件上传到.Net WCF服务。
使用Chrome时,会定期调用onprogress函数。
使用Edge时,它只会在最后被调用一次。
var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload?filename=' + encodeURIComponent(fileToUpload.serverFilename), true);
// Listen to the upload progress.
xhr.upload.onprogress = function (e) {
if (e.lengthComputable) {
progress.setValue(e.loaded / e.total);
}
};
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
if (onSuccess !== undefined) onSuccess(fileToUpload);
} else {
Ext.Msg.alert('Upload Error', 'File: ' + fileToUpload.filename + '<br><br>Error: ' + xhr.status + ' ' + xhr.statusText);
if (onError !== undefined) onError();
}
}
};
xhr.ontimeout = function () {
console.log('transfer timed out')
}
var reader = new FileReader();
reader.onload = function () {
var arrayBuffer = this.result;
xhr.send(arrayBuffer);
}
reader.readAsArrayBuffer(fileToUpload.file);
这种行为显然是不一致的,但是我建议Edge的行为不符合应有的表现(如果只在最后调用,则onprogress事件中就没有意义了。)
有任何解决方法吗?还是我误解了它应该如何工作(尽管Chrome似乎很好理解)?
是Microsoft错误或不合规?并且需要等待10年,看看他们是否愿意解决它。