IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Téléchargement de fichier en AJAX.


Sujet :

AJAX

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 34
    Points : 25
    Points
    25
    Par défaut [AJAX] Téléchargement de fichier en AJAX.
    Bonjour tout le monde,

    Je voudrais faire une application javascript permettant de télécharger un fichier sur mon serveur en AJAX.
    Comme sur le site : https://mega.co.nz/
    Pour cela, j'ai une application serveur qui me découpe mon fichier en plusieurs parties.
    Ces parties sont récupéré grâce a des requêtes AJAX.
    La ou je bloque, c'est pour récupérer le résultats des requêtes AJAX qui sont asynchrones.

    Voici le code que j'ai commencé a faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //Buffer qui va contenir les données téléchargés
    var buffer = new Array(nbParts);
    //nbParts est le nombre de parties du fichier qui doivent être téléchargées
    for(var i=0; i < nbParts; ++i) {
    	var ajax = getXMLHttpRequest();
    //Reception du résultat des requêtes AJAX.
    	ajax.onreadystatechange = function() {
    		if (ajax.readyState == 4 && (ajax.status == 200 || ajax.status == 0)) {
    			buffer[i] = atob(ajax.responseText);
    		}
    	}
    	ajax.open("GET", url + "?type=download&file=" + alias + "&index=" + offset + "&size=" + parseInt(sizeParts-1), true);
    	ajax.send(null);
    	offset += sizeParts;
    }
    Mais mon tableau buffer ne se remplis pas. :s
    J'ai essayé de regarder les sources javascript du site mega, mais je n'arrive pas a comprendre comment ils font pour récupérer le résultats de ces requêtes asynchrones. (class ClassChunk du site mega)
    J'ai aussi pensé a faire de la récursivité dans les fonctions callback des requêtes asynchrone, mais l’Intérêt du mode asynchrone est perdus...

    Merci d'avance pour votre aide,

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 977
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 977
    Points : 44 157
    Points
    44 157
    Par défaut
    Bonjour,
    peut être devrais tu commencer par corriger l'erreur de parenthèse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    buffer[i] = (ajax.responseText;

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Oui, c'est une erreur que j'ai faite quand j'ai voulus mettre mon code sur developpez.net
    Je viens d'éditer mon post.
    J'ai aussi remarqué que si je rajoute un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    console.log(buffer);
    Juste après ma boucle for, j'obtiens cette sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array [ <6 emplacements disponibles>, "ll" ]
    Mais plus souvent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array [ <6 emplacements disponibles> ]
    Alors que toutes mes requêtes AJAX me retourne un résultat.

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 977
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 977
    Points : 44 157
    Points
    44 157
    Par défaut
    Le résultat de tes appels ne reviennent pas forcément avant la fin de la boucle (Un classique AJAX : utiliser les données au bon moment !).

    Ce que tu peux faire :
    - c'est d'envoyer la requête suivante quand la précédente est de retour
    - gérer dans ta fonction de callback l'état de tes retours et si tu as tout tu agis en conséquence .

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 386
    Points : 10 413
    Points
    10 413
    Par défaut
    Salut,

    Si tu veux télécharger un fichier vers le serveur via ajax, il y a une solution prête à l'emploi ici :

    - Permet de surpasser les limitations serveur "upload_max_filesize" et "post_max_size".
    - Permet la reprise d'un téléchargement interrompu après un arrêt volontaire ou une panne internet ou serveur, en utilisant la partie sauvegardée.
    - Supporte l'upload multiple et surpasse la configuration serveur "max_file_uploads" avec un système de file d'attente (queuing).
    - Retour d'informations en temps réel, configurable.

    Le code de développement est inclus dans le dossier pré configuré proposé en téléchargement donc tu peux t'en inspirer si tu souhaites le refaire toi-même. Sinon tu peux faire des tests en moins de 3 minutes puisqu'il s'agit juste de mettre le dossier sur ton serveur et d'utiliser les exemples fournis.

    La seule restriction est que la classe fournie côté serveur est en php. Si tu utilise un autre langage serveur il faudrait refaire l'équivalent de cette classe (mais l'essentiel du travail est fait côté javascript et compatible avec tous les langages serveurs).

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/12/2014, 20h52
  2. [AJAX] Upload de fichier par ajax
    Par ernestrenan dans le forum AJAX
    Réponses: 3
    Dernier message: 11/01/2012, 08h00
  3. Réponses: 2
    Dernier message: 19/07/2011, 10h36
  4. [AJAX] Telecharger un fichier en Ajax
    Par ensisoft dans le forum AJAX
    Réponses: 4
    Dernier message: 11/04/2010, 14h01
  5. [AJAX] Appel de fichier avec Ajax et jQuery
    Par Floco dans le forum AJAX
    Réponses: 14
    Dernier message: 09/04/2010, 23h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo