Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Récupération de données binaires

Envoyé par : Christophe Charron

Date : 10/06/2006 10:05

Bonjour, Bien que le script suivant fonctionne parfaitement lancé seul

<?php
header('Content-type: text/xml; charset=utf-8');
define('EOL', "\r\n");
require("_graal_fonctions_mysql.php");
require("_graal_fonctions_diverses.php");
$vl_e_doc_cleunik=intval(fa_recup_param('vl_e_doc_cleunik','0'));
$sql_req = 'SELECT _documents.document AS document, _documents.tailledoc AS tailledoc FROM _documents WHERE _documents.doc_cleunik = '.$vl_e_doc_cleunik;
$vl_e_critere_cleunik=0;
$result = _graal_requete_bd($sql_req);
//  On n'est censé n'en avoir qu'un !!!
//echo('<requete01 data="'.$sql_req.'"/>');
while ($row = mysql_fetch_assoc($result))
  {
  //header("Content-disposition: attachment; filename=monnouveaufichier.bmp");
  //header("Content-Type: application/force-download");
   echo $row['document'];
  }
_graal_libere_requete_bd($result);
_graal_ferme_connexion();
?>

mais ne sachant l'exploiter via XMLHttpRequest, je tente de récupérer mes données en direct, très classiquement via

function fa_xmlhttprequest_txt(url,request,callback,target)
{
    var http = new XMLHttpRequest();
    if(!request){mode="GET";} else {mode="POST";}
    http.open(mode,url,true);
    if(mode=="POST"){http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');}
     http.onreadystatechange=function(){if(http.readyState==4){callback(http.responseText,target,http.responseText.length);}};
    http.send(request);
}

Malheureusement, le

vl_e_longueur_recup=http.responseText.length

me renvoie une valeur erronée ce qui fait que le fichier créé ensuite

...
var result = outputStream.write( vl_c_datas, vl_e_longueur_recup );
...

est en l'occurrence tronqué.

Comment faire ?

# Re: Récupération de données binaires

Envoyé par : laurentj

Date : 11/06/2006 00:20

euh.. xmlhttprequest, comme son nom l'indique est fait pour récupérer du xml. Et du texte classique via responseText.. Mais en aucun cas du binaire..

Mais euh... apparement, tu veux renvoyé une image, en forçant le download.. Pourquoi ne pas mettre simplement un lien dans ton fichier xul vers ton fichier php ? ;-) (ou utiliser une balise image pour l'afficher...)

# Re: Récupération de données binaires

Envoyé par : Christophe Charron

Date : 11/06/2006 06:25

Merci pour la réponse, dont je me doutais un peu de la teneur. Pour télécharger, en effet, c'est la solution retenue; j'aurais aimé avoir plus de choix dans le cas où je ne voulais que récupérer le contenu...

# Re: Récupération de données binaires

Envoyé par : Zmx

Date : 12/06/2006 15:16

Je ne suis pas sur d'avoir saisi ce que tu veux, mais:

  • Tu peux "télécharger" un fichier comme le fais le downloader de FF (voir le code en question)
  • Ensuite le lire via un localFile (sauf si le code en question s'occupe d'enregistrer ce qu'il recoit, donc tu a juste a supprimer cette etape)

Je suis a coté de la plaque, ou pas ?

# Re: Récupération de données binaires

Envoyé par : Christophe Charron

Date : 12/06/2006 16:45

En fait, je ne voulais pas télécharger à la sauce Firefox, mais récupérer le "stream" pour créer un fichier que j'aurai proposé d'enregistrer dans un répertoire quelconque, en ouvrant le sélecteur de répertoire. L'autre solution à l'arrache étant d'encoder le binaire en base64 par exemple, lors de la sauvegarde, puis de le décoder lors de la lecture, mais c'est un peu tiré par les cheveux et surtout foireux en terme d'interopérabilité... Donc en l'état actuel de mes connaissances, je télécharge sauce Firefox.

# Re: Récupération de données binaires

Envoyé par : Zmx

Date : 12/06/2006 18:11

A prioris FF fait la meme chose (sauf qu'il sauvegarde le stream dans un fichier temporaire avant de le copier) Sinon j'ai un peu survoler LXR, et j'ai bien l'impression que tu ne peux pas avoir directement le stream (dans le meilleur des cas tu a le fichier de cache)

J'ai pas pousser plus que ça (désolé) mais on dirais qu'il y as un debut de piste dans http://lxr.mozilla.org/seamonkey/source/calendar/providers/ics/calICSCalendar.js#892

# Re: Récupération de données binaires

Envoyé par : Christophe Charron

Date : 12/06/2006 18:39

Merci de t'être penché sur la question. Pour ma part, je suis encore loin de suffisament maîtriser pour aller farfouiller ce code.

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.