Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Envoyer une image en POST connaissant son URL

Envoyé par : xuli

Date : 03/02/2006 19:43

Bonjour,

Je cherche à envoyer une image en POST connaissant l'URL de image.

Pour le moment, je suis capable d'envoyer en multipart/form-data des données textuelles + un fichier choisi via la boite de selection de fichier et je souhaiterai envoyer une image (via l'URL) à la place du fichier choisi sur le disque du client.

Pour tout vous dire, l'image que je souhaite envoyer est une image contenue dans une page HTML. Je souhaite ajouter dans le menu contextuel de l'image une action "POST cette image" .

Voici le code envoi le fichier :

function post()
{

 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp =  Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
fp.appendFilters(nsIFilePicker.filterText |  nsIFilePicker.filterAll);
fp.init(window, "Select a File", nsIFilePicker.modeOpen);
//
var rv = fp.show();
if (rv == nsIFilePicker.returnOK)
{
  var file = fp.file;

const BOUNDARY="-111222111"; //ce qui va nous servir de délimiteur

const MULTI="@mozilla.org/io/multiplex-input-stream;1";
const FINPUT = "@mozilla.org/network/file-input-stream;1";
const STRINGIS="@mozilla.org/io/string-input-stream;1";
const BUFFERED="@mozilla.org/network/buffered-input-stream;1";

const  nsIMultiplexInputStream=Components.interfaces.nsIMultiplexInputStream;
const nsIFileInputStream=Components.interfaces.nsIFileInputStream;
const  nsIStringInputStream=Components.interfaces.nsIStringInputStream;
const nsIBufferedInputStream =  Components.interfaces.nsIBufferedInputStream;

// 1
var  mis=Components.classes[MULTI].createInstance(nsIMultiplexInputStream);

//2
var  fin=Components.classes[FINPUT].createInstance(nsIFileInputStream);
fin.init(file,0x01,0444,false); //fic est un objet de type fichier
var  buf=Components.classes[BUFFERED].createInstance(nsIBufferedInputStream);
buf.init(fin,4096);

//3
var hsis=Components.classes[STRINGIS].createInstance(nsIStringInputStream);
var hsisSize=Components.classes[STRINGIS].createInstance(nsIStringInputStream);
var sheader=new String();
sheader+="\n";
sheader+="--"+BOUNDARY+"\nContent-Disposition: form-data; name=\"text\"\n";
sheader+="\n1";
sheader+="\n"+"--"+BOUNDARY+"\n"
sheader+="Content-Disposition: form-data; name=\"image_filename\";  filename=\""+file.leafName+"\"\n";
sheader+="Content-Type: application/octet-stream\n";
sheader+="Content-Length: "+fp.file.fileSize+"\n";
sheader+="\n";
hsis.setData(sheader,sheader.length);

//4
var endsis=Components.classes[STRINGIS].createInstance(nsIStringInputStream);
var bs=new String("\n--"+BOUNDARY+"--\n");
endsis.setData(bs,bs.length);

//5
mis.appendStream(hsis);
mis.appendStream(buf);
mis.appendStream(endsis);
/* 
var size = (mis.available()-2);
sheader="Content-Length: "+size+"\n"+sheader;
hsis.setData(sheader,sheader.length);
var  mis=Components.classes[MULTI].createInstance(nsIMultiplexInputStream);
mis.appendStream(hsis);
mis.appendStream(buf);
mis.appendStream(endsis);
*/
//6
var xmlr = new XMLHttpRequest();
xmlr.open("POST","http://"+server+"/post.php",false);
xmlr.setRequestHeader("Content-Type","multipart/form-data;  boundary="+BOUNDARY);
xmlr.setRequestHeader("Connection","close");
xmlr.setRequestHeader("Content-Length",(mis.available()-2));

xmlr.send(mis);

 if ( xmlr.status != "200" ) {
      alert("xmlr erreur " + xmlr.status);
    } else {
      alert(xmlr.status+" "+xmlr.responseText);
      // traitement du contenu
   }

}

}

Merci pour toutes vos idées.

# Re: Envoyer une image en POST connaissant son URL

Envoyé par : laurentj

Date : 06/02/2006 10:08

Pour tout vous dire, l'image que je souhaite envoyer est une image contenue dans une page HTML.

Pourquoi ne pas envoyer juste l'url, plutôt que de poster l'image ? Ce sera alors au serveur d'aller chercher lui même l'image, ce qui devrait être plus simple car tu dois avoir certainement déjà tout ce qu'il faut coté serveur.

# Re: Envoyer une image en POST connaissant son URL

Envoyé par : xuli

Date : 06/02/2006 10:12

Malheureusement, je ne peux pas envoyer l'URL, je me connecte à une API et je dois faire un POST multi-part avec l'image dans le POST.

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.