2013-11-22 27 views
0

這裏是我的代碼,我有這個代碼上傳文件,但幾乎每一次,2個或多個文件不要因爲相同類型的錯誤的成功:異步上傳多個文件而不彼此跺腳?

http://localhost:8080/_ah/upload/ag9mdW5ueS1wYWdlcy1ocmRyIgsSFV9fQmxvYlVwbG9hZFNlc3Npb25fXxiAgICAgICKCgw 
404 (No upload session: ag9mdW5ueS1wYWdlcy1ocmRyIgsSFV9fQmxvYlVwbG9hZFNlc3Npb25fXxiAgICAgICKCgw) 

現在這裏是我需要爲每個文件獲取不同的上傳url。 getUploadURL()正在爲每個呼叫返回完全相同的URL。

Cache Busting也沒有幫助。

我試過了Ext.TaskManager,沒有它,結果相同,上面發佈的錯誤是我用來測試的10個文件中的至少2個。

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); 

我真的寧願有一個異步的解決方案,但現在我只需要獲得這工作。