Envoyer un fichier avec XmlHttpRequest: Streaming?

Je suis en train de télécharger de gros fichiers par glisser-déposer. J'ai ce morceau de code Javascript:

xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('X-File-Name', file.name);
xhr.setRequestHeader('X-File-Size', file.size);
xhr.setRequestHeader('Content-Type', file.type);
xhr.send(file);

url est une chaîne de caractères de l'url cible et file est un Blob (selon http://www.w3.org/TR/XMLHttpRequest2/#the-send-method), que j'ai récupéré après un fichier de glisser-déposer. Ce code fonctionne dans Chrome 12, Safari 5 et Firefox 4 et envoie le contenu brut du fichier dans le corps de la requête HTTP.

Toutefois, si le fichier est assez gros de la demande n'est jamais envoyé. Au lieu de cela, le XMLHttpRequest objet d'incendies et de l'événement d'erreur (sans aucun message utile). Cette limite est 86Mb dans mon environnement, mais il varie d'une machine à l'autre.

La console javascript de Chrome affiche le message:

POST http://localhost/xfiles/xfiles.php undefined (undefined)

qui n'a rien à voir avec mon code (qui fonctionne parfaitement avec des fichiers plus petits).

Il semble que le navigateur lit tout le fichier en mémoire et avant de l'envoyer. Il y a probablement un souvenir d'exception ou quelque chose comme ça qui arrête le processus. En tout cas, il n'y pas de requête HTTP est envoyée, il est certain que le serveur limites n'ont rien à voir avec ce problème.

De toute façon, la lecture de tout fichier est un gaspillage de ressources.

Est il une méthode pour envoyer le fichier en streaming de la mode, octet par octet, sans avoir à les stocker dans la mémoire de la première?

source d'informationauteur linepogl