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

Supponiamo di avere un form, con dei campi predisposti all'invio di 
file.
Quando effettuo il submit, tramite metodo post vengono inviati i file 
al server. Il trasferimento continua (se tutto va bene) fino a quando 
non termina l'upload.
E' possibile, tramite javascript, sapere quanto è grande un file PRIMA 
di inviarlo al server? Ok, so già che la risposta è no. :-)
Oltre a questo, è possibile sapere, senza interpellare il server, 
quanti byte sono stati inviati dal client durante l'upload? E so anche 
in questo caso che js non può fare nulla.
Ma esistono altri metodi (crossbrowser) che permettono di fare ciò, 
senza interrogare il server per avere un riscontro?
In fin dei conti, a pensarci bene, il server non è necessario in questo 
caso: i dati li invio io (che sono il client), in un tempo che posso 
tranquillamente misurare, e quindi a una velocità che potrei 
comodamente calcolare (dimensione/tempo).
Peccato che js non centri niente con tutto ciò. :-)
--
rob4you

 Peccato che js non centri niente con tutto ciò. :-)
:-) che è l'unico linguaggio client-side usabile, quindi la risposta è ...
?
se è una intranet allora magari con un activex per IE o xul per gecko ...
-- 
"Non sai che ci vuol scienza
 ci vuol costanza
 ad invecchiare senza maturità"
									    F.G.

 Peccato che js non centri niente con tutto ciò. :-)
Un bel rompicapo, però sono proprio i rompicapo che aumentano il
livello di adrenalina e stimolano a trovare soluzioni, anche
impossibili.
Provate il seguente:
http://swfupload.mammon.se/
qui trovate un'esempio ed altri commenti
http://ajaxian.com/archives/swfupload-a-nicer-file-upload-experience
si tratta di un oggettino flash, le spiegazioni ed i commenti sono
incoraggianti. Io lo proverò appena avrò tempo (molto poco in questo
periodo), però se fate qualche esperimento e riportate l'esperienza in
questo ng ve ne sarei infinitamente grato.
Ciao
Oreste

 se è una intranet allora magari con un activex per IE o xul per gecko ...
Ho capito.....creererò un consortium che elaborerà nuovi standard, 
RIVOLUZIONEEE!! :-D
--
rob4you

 comodamente calcolare (dimensione/tempo).
Messa in questi termini, non sono d'accordo. I dati vengono inviati al
server. Se invii 50k, ma il server è down o tarda a rispondere, i tuoi
"comodi calcoli" vanno a farsi friggere... Motivo per il quale i tempi
di upload e download nei programmi sono puramente indicativi e vengono
stimati nuovamente ogni volta :)
Era più corretto quel che dicevi prima, ovvero avere la possibilità di
interrogare il browser per sapere i byte inviati o ricevuti, in quanto
il compito di cui sopra viene eseguito già dal browser. Ma una cosa di
questo tipo si fa eventualmente nelle intranet, non in internet.
Leggendo gli ultimi tuoi post in merito temo tu stia confondendo i due
contesti: in internet, l'utente ha la priorità. Ciò lega fortemente lo
sviluppatore con dei vincoli non indifferenti. Nelle intranet, invece,
la priorità ce l'hanno gli "scopi" per le quali vengono realizzati gli
applicativi. Quindi i vincoli si possono adattare, se la situazione lo
richiede.
-- 
~ Se i sintomi persistono, insultare il medico.

 la priorità ce l'hanno gli "scopi"
Anche qui d'accordo, ma come nel mio altro post, sottolineo anche qui 
che è possibilissimo fare ciò che chiedo in modo diverso: esempio, 
montando con un'opportuna estensione (che guarda caso si chiama 
uploadProgress :-D ), e facendo delle richieste asincrone via js, 
riesco a ottenere esattamente ciò che chiedo: "scopi" e "utente" sono 
entrambi soddisfatti così. :-)
Ma io volevo un po' vedere la cosa in un'altra ottica. Ma a quanto pare 
la risposta è sempre NO! :-)
--
rob4you

 Ma io volevo un po' vedere la cosa in un'altra ottica. 
Quale ottica?


 Quale ottica?
Quella che ho esposto finora.
--
rob4you

 grande il file? quanto tempo è trascorso?".
Sicuro che PHP non sia già in grado di farlo?
Con altre tecnologie (in Perl, ad esempio) è perfettamente fattibile.
Guarda, ad esempio, 
http://encodable.com/uploaddemo/
, che fa esattamente
quello che descrivevi: upload ordinario accompagnato da richieste via
XmlHttpRequest.
Max

 quello che descrivevi
I like it! :-) Con l'ausilio di perl si può fare tranquillamente.
Si ma infatti i modi per farlo ce ne sono, e sono anche diversi. Quello 
che hai segnalato tu ad esempio è molto bello.
Un esempio di un altro metodo, che utilizza esclusivamente PHP, è: 
http://php5.bluga.net/UploadProgressMeter/demo.php
.
Insomma, i metodi ci sono, per fortuna.
Ma tutti (giustamente) coinvolgono anche il server.
Io mi chiedevo se il server potesse esser tenuto in "disparte" per 
queste "statistiche", e i calcoli potessero essere fatti tutti e 
soltanto dal client, seppur in maniera "approssimata". In questo modo 
eviterei di andare a bussare alla porta del server ogni tot secondi per 
chiedergli "a che punto sto?" :-)
--
rob4you

 Max
Dal lato server non c'è problema esistono molti script in Perl
gratuiti e ben funzionanti. L'arcano è sul lato client dove devi
trovare trucchetti e raggiri per risolvere il problema. Certo è che la
barra di progressione serve solo ad uno scopo, a non far spazientire
o, meglio, entrare in panico l'operatore, non serve ad altro,
informazioni sicure al 100% non le può dare.
Ciao
Oreste

 Quella che ho esposto finora.
Che continua a sfuggirmi, ti dirò. :) Dato che mi sembra la "stessa"
ottica, e non un'altra.


 informazioni sicure al 100% non le può dare.
Quoto.
--
rob4you

 ottica, e non un'altra.
Allora :-) al giorno d'oggi, se vuoi statistiche (con tanto di tempo 
residuo, velocità ecc.) sullo stato di upload puoi:
1) bombardare il server (opportunamente configurato, che siano script 
in PERL, o estensioni in PHP, CGI o altro in altri linguaggi) con 
richieste continue, nell'arco di tutto l'upload, in modo da 
interrogarlo circa lo stato dell'upload.
2) usare soluzioni flash come quella in 
http://www.element-it.com/Examples/MultiPowUpload/SimpleUpload.html
3) usare soluzioni di statistiche "parziali" come ad esempio: 
http://swfupload.mammon.se/
e TEORICAMENTE:
4) usare SOLO il client (con un linguaggio SOLO del client) che 
controlli quanti byte vengono inviati, e conosca quanto sia grande 
l'intero file da inviare, per elaborare statistiche INDIPENDENTI dal 
server, seppur non proprio fedelissime.
Bene, sin dal mio primo post, mi chiedevo se il punto 4) potesse 
trovare un aiuto in js. Sin da subito io stesso sapevo che la risposta 
fosse no (js non può manco accedere al filesystem, quindi è evidente 
che non può nemmeno determinare la dimensione di un file prima che esso 
sia inviato).
Mi domandavo dunque se esistevano altri modi, "server-indipendent" e 
cross-browser, per arrivare a ciò. Anche se di Flash conosco ben poco, 
forse l'unico metodo "potrebbe" nascere da lui.
--
rob4you

 forse l'unico metodo "potrebbe" nascere da lui.
Si, che fa la stessa cosa ma in modo trasparente :)
Per dover di cronaca comunque non è l'unico metodo. C'è Java.


 C'è Java.
Vero anche questo. Ma spesso, a parità di task, è più "pesantuccio" e 
macchinoso.
ps: io la mia presenza nel thread la chiudo qui. Tanto non stiamo 
andando avanti di una virgola.
Del resto, visto che non è nemmeno di competenza di js questo discorso, 
direi che siamo quasi ot. ;-)
Ci ribecchiamo spero presto su altri topic. A presto ZER0! ;-)
--
rob4you

 Del resto, visto che non è nemmeno di competenza di js questo discorso,
Lo è. Non di js su world wide web, però. 
