2011-09-23 66 views
0

即使同時上傳100個5兆字節的文件,小文件也可以順利進行(儘管它一次只能處理5個文件,其餘的文件會排隊),但150MB文件會導致瀏覽器掛起它啓動幾秒鐘。大文件上傳會導致瀏覽器掛起

function start(file) { 
    var xhr = new XMLHttpRequest(); 
    ++count; 

    var container = document.createElement("tr"); 

    var line = document.createElement("td"); 
    container.appendChild(line); 
    line.textContent = count + "."; 

    var filename = document.createElement("td"); 
    container.appendChild(filename); 
    filename.textContent = file.fileName; 
    filename.className = "filename"; 

    initXHREventTarget(xhr.upload, container); 

    var tbody = document.getElementById('tbody'); 
    tbody.appendChild(container); 
    tbody.style.display = ""; 

    var boundary = "xxxxxxxxx"; 

    xhr.open("POST", "uploader.php"); 

    xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary="+boundary); // simulate a file MIME POST request. 
    xhr.setRequestHeader("Content-Length", file.size); 

    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4) { 
      if ((xhr.status >= 200 && xhr.status <= 200) || xhr.status == 304) { 
       if (xhr.responseText != "") { 
        alert(xhr.responseText); // display response. 
       } 
      } 
     } 
    } 

    var body = "--" + boundary + "\r\n"; 
    body += "Content-Disposition: form-data; name='upload'; filename='" + file.fileName + "'\r\n"; 
    body += "Content-Type: application/octet-stream\r\n\r\n"; 
    body += $.base64Encode(file.getAsBinary()) + "\r\n"; 
    body += "--" + boundary + "--"; 
    xhr.sendAsBinary(body); 

    } 
+0

聽起來像預期的行爲,根據這些海量數據,不是嗎?這真的是一個問題嗎? –

+0

因此,您唯一的抱怨是瀏覽器在檢索和發佈大文件時掛起? –

回答

2

IS要花費較長的時間不平凡的量在文件的內容來發出聲音,Base64編碼,然後做你的字符串連接。換句話說:按預期行事。

+0

http://www.mediafire.com顯示它根本不需要掛起。當我把相同的大文件放在那裏瀏覽器沒有掛起時,我仍然可以切換標籤,甚至取消文件啓動。那麼他們做什麼不同? (注意:您需要使用firefox來獲取mediafire的拖放功能,並查看我的意思) – natli

相關問題