2013-11-22 33 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); 

我真的宁愿有一个异步的解决方案,但现在我只需要获得这工作。