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] Envoyer un fichier créé dynamiquement


Sujet :

AJAX

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 850
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 850
    Par défaut [AJAX] Envoyer un fichier créé dynamiquement
    Bonjour,

    J'ai vu qu'il était impossible d'envoyer un fichier pour des raisons de sécurité (pour ne pas qu'un script puisse lire ce qu'il y a sur le disque dure et ainsi envoyer des données sans que l'utilisateur ne le veuille).
    Mais est-il possible d'envoyé un fichier créé dynamiquement (dont le contenu a été créé intégralement en js) ? si oui comment ?

    Je pose cette question car je voudrais envoyer des données qui ne sont pas au format standard d'un HTTP POST (ex: var1=toto&car2=tutu) : je voudrais envoyer des données qui représentent des lignes de commande à la MS-DOS (ex : "cd toto\r\n copy a.exe b.exe\r\n"). Donc il me semble que ça serait plus simple/standard d'envoyer ces données sous forme de fichier.
    => on a le droit d'envoyer ce que j'ai donné en exemple dans un HTTP POST (je ne pense pas) ?


    merci d'avance,

  2. #2
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    Dans ton exemple il s'agit de texte, pourquoi n'envoie-tu pas ça comme un champs texte ?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 850
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 850
    Par défaut
    Parce que je ne sais pas trop si certains caractères sont interdis (j'ai quelques doutes à ce sujet) : le contenu doit être URL encodé ?

    Si j'envoie sous forme de fichier je sure qu'il n'y a pas besoin de faire de conversion (les données peuvent être envoyée de manière brute).

    voici un exemple de script :
    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
    16
    17
    18
    19
    20
     
    function SendFormulaire(){ // envoi de formulaire
    	// utilise JQuery
     
    	var data="";
    	// génération des données
    	data += "$CMD1=" + getInputBox($("#cmd1_arg1")) + " " + getInputBox($("#cmd1_arg2")) + " \"" + $("#textAera1").val() + "\"";
    	data += "\r\n" + "$CMD2=" + getInputBox($("#cmd2_arg1"));
     
     
    	// lancement de la requete
    	$.ajax({
    		url: fileJSON,
    		dataType: "json",
    		cache: false,
    		success: funcSuccess,
    		type: "POST",
    		data: data
    	});
    }
    J'envoie cette requête vers un serveur embarqué et j'aimerais donc pour lui facilité la tache éviter qu'il est à faire des conversions durant le traitement.


    --------------------------------------------
    J'ai fait un test :
    si #textAera1 contient la chaine suivante (ne pas prendre en compte le premier et le dernier guillemet => je les ai rajouté pour délimiter la chaine) :
    "fdséésqdqs&%esdf&aa="dssfsdf" "

    J'ai sniffé le paquet envoyé pour voir comment était encodé ce champs :
    66 64 73 c3 a9 c3 a9 73 ---> fds....s
    71 64 71 73 26 25 65 73 ---> qdqs&%es
    64 66 26 61 61 3d 22 64 ---> df&aa="d
    73 73 66 73 64 66 22 20 ---> ssfsdf"
    20 20 20 20 20 --->
    Je n'ai pas l'impression qu'il y ai besoin d'encodage, non ?
    => On peut voir que les accents sont codés sur deux octets (pourquoi n'est-il pas encodé sur un seul caractère ?) : est-ce que leur encodage dépend de l'OS/Webbrowser ?... j'aurais toujours le même encodage quelque soit le type de client ?
    => par exemple, j'ai vu qu'en telnet, les accents ne sont pas encodés de la même manière si on est sur linux ou windows...

    PS : peut-être que je ne suis pas dans la bonne section pour poser cette question (vu que ça concerne le protocole HTTP) ?

  4. #4
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    Les caractères sont encodés en UTF-8 dans ta requête Ajax.

    Pour encoder les paramètre tu as deux solutions.

    application/x-www-form-urlencoded qui ressemble à l'exemple que tu as
    donné ou multipart/form-data

    Détails et références sur les RFC

    Maintenant je serais toi je commencerai par regarder quel est la manière
    la plus simple de réceptionner les données sur le serveur. Tu es en php ou autre chose ?

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 850
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 850
    Par défaut
    Merci pour ta réponse

    Citation Envoyé par marcha Voir le message
    Les caractères sont encodés en UTF-8 dans ta requête Ajax.
    Il y a donc déjà un problème à ce niveau car il y a des caractères non ASCII dans ce que j'envoie : il faut donc que j'URL encode ma chaine avant de l'envoyer et que mon serveur soit capable de faire l'opération inverse en réception.

    Lorsque j'URL encode, ma chaine se transforme en :
    "fds%C3%A9%C3%A9sqdqs%26%25esdf%26aa%3D%22dssfsdf%22++++++"
    => j'ai les mêmes valeurs si j'envoie mon formulaire sans javascript
    => donc "é" = %C3%A9 : ce qui correspond à la valeur numérque d'un "é" en UTF-8. Comment coté serveur je sais sous quel format (UTF-8, UNICODE, ...) sont mes données ? c'est forcement de l'UTF-8 ?




    Citation Envoyé par marcha Voir le message
    Pour encoder les paramètre tu as deux solutions.
    application/x-www-form-urlencoded qui ressemble à l'exemple que tu as
    donné ou multipart/form-data
    Donc a priroi les données sont envoyée par défaut en "application/x-www-form-urlencoded". J'aimerais bien pouvoir passer en "multipart/form-data", ça me simplifierait le problème : c'est possible à faire ?



    Citation Envoyé par marcha Voir le message
    Maintenant je serais toi, je commencerais par regarder quel est la manière
    la plus simple de réceptionner les données sur le serveur. Tu es en php ou autre chose ?
    Je suis en langage C (système embarqué). Actuellement mon traitement des données en réception ne gère pas l'URL encodage, c'est pourquoi j'aimerais autant que possible passer sur la seconde méthode.

  6. #6
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Citation Envoyé par boboss123 Voir le message
    Il y a donc déjà un problème à ce niveau car il y a des caractères non ASCII dans ce que j'envoie
    L'UTF-8 permet d'encoder les caractères unicode. A priori pas de soucis pour les caractère non ASCII, par contre il faut voir si tu peux décoder facilement coté serveur.

    Citation Envoyé par boboss123 Voir le message
    Comment coté serveur je sais sous quel format (UTF-8, UNICODE, ...) sont mes données ? c'est forcement de l'UTF-8 ?
    Ne confonds pas UTF-8 qui est un encodage et UNICODE qui est un jeu de caractère.

    Coté serveur tu dois te baser sur l'en-tête HTTP Content-Type et en particulier ce qui est écrit après charset= lorsque c'est codé application/x-www-form-urlencoded

    En multipart/form-data chaque section peut avoir son propre encodage.

    Je pense pas que tu aies besoin de recourir à multipart/form-data, cela ne va rien simplifier, au contraire.

    Si tu veux simplifier le décodage coté serveur, alors essaye de l'envoyer dans
    l'encodage "natif" du serveur. Peut-être en le spécifiant ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $.ajax({
      type: "POST",
      url: "file.php",
      data: "{'name1':'value', 'name2':'value'}",
      contentType: "application/x-www-form-urlencoded; charset=iso-8859-1"
    });
    J'ai jamais testé ça :-)

    Citation Envoyé par boboss123 Voir le message
    Je suis en langage C (système embarqué). Actuellement mon traitement des données en réception ne gère pas l'URL encodage, c'est pourquoi j'aimerais autant que possible passer sur la seconde méthode.
    Tu vas pas échapper à une forme de décodage coté serveur. Par contre tu peux imaginer encode en javascript en hexa ou en base64 pour simplifier le
    décodage en C.

    Exemple: toto.php?x=414243 (pour écrire ABC) et tu dois pouvoir extraire la query string facilement de ta requête HTTP et virer les x premier caractères pour isoler "414243", ensuite une petite conversion de paires hexa en byte et le tour est joué.

Discussions similaires

  1. Ajax Envoyer un fichier à php
    Par Adrien88390 dans le forum jQuery
    Réponses: 1
    Dernier message: 26/01/2014, 13h31
  2. [AJAX] Comment envoyer un fichier par la méthode post à l'aide d'ajax?
    Par othmane126 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/03/2008, 12h00
  3. Réponses: 5
    Dernier message: 21/11/2006, 22h58
  4. Quel langage pour envoyer un fichier sur une adresse
    Par dai.kaioh dans le forum Développement
    Réponses: 2
    Dernier message: 02/04/2004, 16h38
  5. Réponses: 1
    Dernier message: 19/08/2003, 16h11

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