Я использую следующий 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 лет, чтобы увидеть, потрудятся ли они это исправить.