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

JavaScript Discussion :

array of byte


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut array of byte
    Bonjour,
    Je développe un module d'envoie de fichier binaire en javascript vers un serveur. Je suis assez limité dans ce que je peux faire côté serveur.

    J'utilise ADODB.Stream pour lire mon fichier sans trop de problème et je stock le tout dans un array of byte. Lorsque j'envoie mes octets un par un à mon serveur, je les reçois bien un à un sauf pour la valeur 0x0D qui correspond à une fin de chaine.

    Je souhaite donc tester la caractère et si je tombe sur 0x0D, envoyer une chaine texte que je testerais côté serveur pour la remplacer par sa valeur correct.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var message = new Array();
     
    var objADOStream = new ActiveXObject("ADODB.Stream");
    objADOStream.Type = adTypeBinary;
    objADOStream.Open();
    objADOStream.LoadFromFile(filename);
     
    for (i = 0; i < objADOStream.Size; i++) {
    	var strContent = objADOStream.Read(1);
    	message[i] = strContent;
    }
     
    objADOStream.Close();
    Mon problème :
    Je n'arrive pas à tester message[i]. Que je fasse des "message[i] == 0x0D", message[i] == 13" ou d'autre combinaison, je n'arrive pas à détecter ce caractère.

    D'ailleurs je ne comprend pas, lorsque je debug mon script, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    message => Object
    message[i] => Array of byte
    message[i][0] => Byte
    Mais message[i][0] n'est pas accessible d'aucune façon.

    Auriez vous des idées sur ce que je pourrais faire pour m'en sortir ?
    Je suis vraiment coincé bien qu'ayant beaucoup cherché sur Internet. J'espère que vous pourrez m'aider.

    Merci.

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    un alert(message[i]) ou alert(message[i][0]) donne quoi ?

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    tu ne peux pas faire un escape ou encodeUricomponent ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut
    Alors déjà, pour tester, j'ai créé un fichier de 256 octets allant de 00 à FF pour tester toutes les valeurs que je pourrais rencontrer.

    Faire un alert(message[i]) m'affiche dans la boite de dialogue les caractères ascii correspondant au octet. Dans le cas de mon caractère qui pose problème j'ai un blanc.
    Avec un alert(message[i][0]) me marque : "Erreur d'execution Microsoft JScript : 'message[...].0' à la valeur Null ou n'est pas un objet."


    Je ne peux pas faire un encodeURIComponent, parce qu'il attend une chaine.

  5. #5
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    j'ai beau chercher , je ne trouve rien

    il s'emble que sous ie un String.fromCharCode('0x0D') effectue un retour a la ligne ( vaut un \n ) mais pas réussis a le tester via un == '\n' :-/

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Par défaut
    Essayes de forcer le LineSeparator :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    adCRLF  -1      Default. Carriage return line feed
    adLF 	10 	Line feed only
    adCR 	13 	Carriage return only
    Mais il y a un truc que je trouve curieux :
    Tu dis être en transaction binaire et tu souhaites dans le même temps 'intercepter un caractère'. Je dis curieux car 0x0D en biniare c'est 0x0D qu'on affichera '0x0D' et pas '\n'. C'est peut-être ta méthode de vérification qui ne convient pas.
    Un fichier binaire qu'on affiche en mode text donne toujours des résultats incohérents (au sens ASCII).

  7. #7
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var b = '\r\n'; alert(b == '\u000D\u000A');
    Ce code renvoie bien true.
    • \u000D correspond au \n
    • \u000A correspond au \r
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  8. #8
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Yes Arnaud , en spécifiant le format via \u mais la il nous dit recevoir un charcode de type 0x0D ou alors j'ai raté un truc

  9. #9
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut
    Bonjour je reviens vers vous parce que j'ai toujours un problème avec le type array of byte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var objADOStream  = new ActiveXObject("ADODB.Stream");
    objADOStream.Type = adTypeBinary;
    objADOStream.Open();
    objADOStream.LoadFromFile(filepath);
     
    for (i = 0; i < Math.ceil(objADOStream.Size / readByteSize); i++) {
    	var strContent = objADOStream.Read(readByteSize);
    	octetStream[i] = strContent;
    }
     
    objADOStream.Close();
    Jusqu'ici, j'obtiens un tableau octetStream qui est un "objet".
    L'objet contient des "Array of Byte".
    Chaque "Array of Byte" contient 512 valeur de type "Number".

    Une fois le fichier lu, je souhaite l'envoyer par AJAX en utilisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    xmlhttp = new XMLHttpRequest();
    xmlhttp.open ("POST", url, true);
    ...
    xmlhttp.send (octetStream[index]);
    Jusqu'à présent, pas de problème sur Internet Explorer 6. Je reçois bien mon tableau de donnée binaire.
    Par contre sous Internet Explorer 8, j'obtiens le message suivant : "Argument non valide".

    J'ai déjà tenté de convertir octetStream avec des fonctions toString() ou join() mais je rencontre à chaque fois une erreur comme quoi l'objet est invalide ou n'est pas un tableau.

    Auriez-vous des idées ?
    Merci.

Discussions similaires

  1. Limite supérieure « Array de Bytes »
    Par DarkVader dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 10/08/2007, 12h04
  2. Caster en array of Byte
    Par the big ben 5 dans le forum Delphi
    Réponses: 3
    Dernier message: 14/11/2006, 15h00
  3. Réponses: 5
    Dernier message: 18/11/2005, 22h11
  4. [Array][String]byte[]
    Par beb-mbs dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 25/08/2005, 06h16
  5. [Type] alternative a "array of byte"
    Par Clorish dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2005, 11h59

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