2011-09-23 5 views
0

Les petits fichiers se déroulent sans problème, même lorsque vous téléchargez simultanément 100 fichiers de 5 mégaoctets (bien qu'il ne gère que 5 fichiers à la fois), mais un fichier de 150 Mo bloque le navigateur plusieurs secondes pendant qu'il initie.Le téléchargement de gros fichiers entraîne le blocage du navigateur

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

Cela ressemble à un comportement attendu à la lumière de ces énormes quantités de données, n'est-ce pas? Est-ce vraiment un problème? –

+0

Donc, votre seule plainte est le navigateur se bloque lors de la récupération et l'envoi d'un gros fichier? –

Répondre

2

Il IS va prendre une quantité non négligeable de temps à slurp dans le contenu du fichier, base64 encoder, puis faites votre concaténation de chaînes. En d'autres termes: Se comporter comme prévu.

+0

http://www.mediafire.com montre qu'il ne doit pas être suspendu du tout. Quand je mets le même gros fichier là-dedans, le navigateur ne se bloque pas, je peux encore changer d'onglet et même annuler l'initialisation du fichier. Alors, que font-ils différents? (Note: Vous devez utiliser firefox pour obtenir la fonctionnalité glisser-déposer de mediafire et voir ce que je veux dire) – natli

Questions connexes