Newsgroup: it.comp.lang.javascript
Titolo: file upload...

ciao a tutti!
Allora... ho cercato un po' in rete ma ho trovato esempi fatti in asp e per 
ie...ma io uso php e firefox :P
ho necessità di fare degli upload di file senza che venga ricaricata la 
pagina... e dato che sono lanciato con xmlhttprequest ho pensato "magari cosi' 
lo posso fare"...
pero'... in rete ho trovato solo gli esempi che ho detto prima... ma io ho 
necessità di implementare per ff...
in sostanza veniva creato un oggetto xml e uno stream.. vi posto il codice per 
ie che ho trovato:
function btn_send.onclick()
{
    // create ADO-stream Object
    var ado_stream = new ActiveXObject("ADODB.Stream");
    // create XML document with default header and primary node
    var xml_dom = new ActiveXObject("MSXML2.DOMDocument");
    xml_dom.loadXML('<?xml version="1.0" ?> <root/>');
    // specify namespaces datatypes
    xml_dom.documentElement.setAttribute("xmlns:dt", 
"urn:schemas-microsoft-com:datatypes");
    // create a new node and set binary content
    var l_node1 = xml_dom.createElement("file1");
    l_node1.dataType = "bin.base64";
    // open stream object and read source file
    ado_stream.Type = 1;  // 1=adTypeBinary
    ado_stream.Open();
    ado_stream.LoadFromFile("c:\\tmp\\myfile.doc");
    // store file content into XML node
    l_node1.nodeTypedValue = ado_stream.Read(-1); // -1=adReadAll
    ado_stream.Close();
    xml_dom.documentElement.appendChild(l_node1);
    // we can create more XML nodes for multiple file upload
    // send XML documento to Web server
    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    xmlhttp.open("POST","./file_recieve.asp",false);
    xmlhttp.send(xml_dom);
    // show server message in message-area
    div_message.innerHTML = xmlhttp.ResponseText;
}
ora... io tutta sta roba per farla in firefox... per l'oggetto xml mi pare si 
usi XMLDocument giusto? ma per lo stream? e su ff esistono gli stessi metodi? 
eventualmente dove posso andare a guardare per una reference?
oppure... esiste un modo piu' semplice? :)
grazie mille a tutti!!
byez
viandante

 necessità di implementare per ff...
No, lascia perdere. Se vuoi, usa XPCOM, ma devi avere tutta una serie di
diritti permessi dall'utente.
Il problema fondamentale è "leggere" un file dal File System utente. La
pratica più usata in application XmlHttpRequest (anche in XUL remoto, a
meno che non sia cambiato qualcosa di recente) è quella di usare una
normalissima form con tag input type "file". Magari su una pagina di popup.
-- 
.ZER0//sign
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 
Si ok, la form con il campo di tipo file ce l'ho ma come faccio in 
XmlHttpRequest a mandarlo su?
mandando tutto in post, nella send non posso scrivere chesso' 
"file1="+document.forms[0].elements("file1").value altrimenti poi lato php non 
ho il file ma solo il nome...
Avevo pensato ad una soluzione con iframe... ma non mi piace tanto...
Sicuramente qualcosa mi sfugge...
Grazie mille
Viandante

 XmlHttpRequest a mandarlo su?
Non hai capito. Non usi XmlHttpRequest (del resto, con questo, non avresti
neppure bisogno di una form). Usi una form con il tag relativo, e fai un
canonico POST tramite submit. Eventualmente in una finestra di popup per
non ricaricare la pagina. Nella web application si fa cosě.
Mi sembrava di essere stato chiaro quando ho scritto "No, lascia perdere."


 
Si pero' hai scritto " La pratica piů usata in application XmlHttpRequest (anche
in XUL remoto, a meno che non sia cambiato qualcosa di recente) č quella di ..."
E quindi ho pensato che si potesse fare in qualche maniera...
Ti ringrazio cmq... vedo se viene carina la soluzione con iframe...
Viandante

 Ti ringrazio cmq... vedo se viene carina la soluzione con iframe...
Io eviterei l'iframe, opterei per una popup.. ma poi dipende molto dal tuo
contesto.
Nelle mie applicazioni faccio in questo modo, anche perché ha un aspetto
più "applicativo", appunto, fornisce un'interfaccia generica anche per più
files, ed è possibile chiuderla automaticamente ad upload avvenuto con
successo.


  
Io una volta caricata la devo far vedere subito... e dato che l'utente ha la 
possibilità di inserirne piu' di una (ma una alla volta, perche' a priori non si 
sa quante ne carica), volevo qualcosa che come dici tu abbia un aspetto un po' 
piu' "aaplicativo".
L'ho pensata cosi' allora: uso la popup e poi faccio caricare mediante 
xmlhttprequest le immagini fino a quel momento tirate su.
Viandante

 xmlhttprequest le immagini fino a quel momento tirate su.
Non capisco cosa c'entri XmlHttpRequest adesso.
Mettiamo caso che usi la popup come ti ho suggerito. Quando questa avrà
finito di fare l'upload ed esso sarà andato a buon fine, prima di
"chiudersi" imposterà nella propria opener tramite le DOM API il nome del
file uploadato (o l'indirizzo delle immagini nel tuo caso, o un tag IMG
direttamente), senza fare alcuna richiesta XmlHttpRequest.
Ma forse, non avendo ben presente il tuo contesto, ho frainteso ciò che mi
hai detto.
-- 
ZER0
~ Legge della Capacità Emoglobinica
Il corpo umano contiene più di 50 litri di sangue, in alta pressione. (La
Fisica nei Cartoni)

 direttamente), senza fare alcuna richiesta XmlHttpRequest.
nono... infatti subito dopo che ho postato mi sono accorto di avere scritto una 
castroneria :) si infatti effettuato l'upoload faccio come hai detto tu... e va 
benone... sarà poi da affinare per eventualmente togliere i passi superflui... 
pero' ora il flusso e' chiaro e funziona bene...