2013-11-22 2 views
0

Вот мой код, у меня есть файлы с загрузкой с этим кодом, но почти каждый раз, два или более файлов не удается из-за того же типа ошибки:Загрузка нескольких файлов асинхронно, не топая друг на друга?

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.

ответ

0

я смог получить эту работу с помощью следующей строки:

xhr.open('POST', url, false); 

вместо

xhr.open('POST', url, true); 

Я бы действительно предпочел бы асинхронное решение, но сейчас мне просто нужно, чтобы получить это работает.

Смежные вопросы