Вот мой код, у меня есть файлы с загрузкой с этим кодом, но почти каждый раз, два или более файлов не удается из-за того же типа ошибки:Загрузка нескольких файлов асинхронно, не топая друг на друга?
http://localhost:8080/_ah/upload/ag9mdW5ueS1wYWdlcy1ocmRyIgsSFV9fQmxvYlVwbG9hZFNlc3Npb25fXxiAgICAgICKCgw
404 (No upload session: ag9mdW5ueS1wYWdlcy1ocmRyIgsSFV9fQmxvYlVwbG9hZFNlc3Npb25fXxiAgICAgICKCgw)
Теперь здесь мне нужно получить другой URL для загрузки для каждого файла. getUploadURL()
возвращает одинаковый URL для каждого вызова.
Кэш Busting также не помогает.
Я пробовал с Ext.TaskManager
и без него с теми же результатами, ошибка, которая вывешивается выше по крайней мере из 2 из 10 файлов, которые я использую для тестирования.
var files = Ext.getDom('select-upload-button-fileInputEl').files;
function uploadFile(url, f) {
var fd = new FormData();
fd.append('file', f, f.name);
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', function (e) {
console.log(f.name + " : " + (e.loaded/e.total) * 100 + "%");
});
xhr.upload.addEventListener('load', function (e) {
console.log(f.name + ' Transfer Complete');
});
xhr.open('POST', url, true);
xhr.send(fd);
}
function getUploadURL(f) {
var xhr = new XMLHttpRequest();
xhr.addEventListener('load', function() {
var url = this.responseText;
console.log(url);
var task = Ext.TaskManager.start({
run: uploadFile(url, f)
});
});
xhr.open('GET', '/upload', true);
xhr.send()
}
Ext.each(files, function (f) {
var task = Ext.TaskManager.start({
run: getUploadURL(f)
});
});
Если изменить код, чтобы сделать xhr.open('GET', '/upload', false);
и xhr.open('POST', url, false);
, он работает как хотелось бы, но я предпочел бы это асинхронный, если это возможно.
Разрешены только решения HTML5.