Newsgroup: it.comp.lang.javascript
Titolo: [?] xmlhttp e immagini

Conoscete un modo per inviare via xmlhttp una immagine al client?
ambiente: intranet.
Genero una immagine via xmlhttp in base ad alcuni parametri; potrei
ovviamente salvarla sul server, ricevere l'ok sul client e caricare l'src
di una immagine hidden; mi chiedevo se fosse possibile non salvarla e
inviarla direttamente da ram via stream al client...
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 inviarla direttamente da ram via stream al client...
Io onestamente non ho capito cosa vuoi fare...
Lato server basta che generi l'immagine, imposti gli header e la mandi. In
PHP e` qualcosa tipo
<?php
	header("Content-type: image/gif");
	$img = createimage(...);
	// lavora sull'immagine
	imagegif($img);
?>
ma non ho capito come la chiedi da client.
Bye.

 ma non ho capito come la chiedi da client.
via xmlhttp richiedo la generazione di questa immagine server-side in base
a parametri che gli passo.
Speravo di trovare una soluzione, anche IE-Only, per inviare il flusso di
byte a javascript e da lì "ricomporre l'immagine".
Un po' troppo, temo...
-- 
"La realtà è un'illusione causata dall'assenza di alcool."
									      A.

 di una immagine hidden; 
Senza ulteriori dettagli, non vedo perché devi usare xmlhttp e salvare
l'ipotetica immagine su server.
Ti basta usare qualcosa tipo:
	var img = new Image();
	img.src = "createimage.aspx?param1=a&param2=b";
La pagina non farà altro che creare l'immagine e restituire nell'output
buffer lo stream di dati, invece che salvarla su disco. Ovviamente devi
ricordarti di impostare i corretti http header.
-- 
~ Il semble que la perfection soit atteinte non quand il n'ya
plus rien à ajouter, mais quand il n'ya plus rien à retrancher"
(A. de Saint-Exupéry)

 	img.src = "createimage.aspx?param1=a&param2=b";
sě, sarebbe eccezionale, ma purtroppo i parametri sono tantissimi (n
coordinate x-y, valori etc), e in piů con xmlhttp posso restituire anche
altri dati.
Praticamente: ho qualche centinaia di report a video formato tabellare con
in alto dei tasti che attualmente generano xls e pdf; devo generare in modo
automatico da alcuni di questi dei grafici statistici.
Passo a javascript i dati necessari all'apertura della pagina (un oggettino
che contiene N oggetti X-Y, ognuno indica il nome da scrivere nel grafico e
i valori); se il client richiede un grafico compare form con possibili
ascisse e ordinate usabili e tipo di grafico richiesto; il client lo
indica, io invio l'array corrispondente javascript al server che provvede
alla creazione del grafico richiesto.
Ripeto: in modo assolutamente generico (nel senso che una volta fatto per
uno devo poter fare lo stesso giochetto con altri report, semplicemente
indicando in un xml che identifica il report quali posso essere ascisse e
quali ordinate, il resto deve avvenire in automatico).
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 Un po' troppo, temo...
Avevo letto qualche tempo fa di un sistema per embeddare le immagini
nell'HTML che usa il base64. Non mi ricordo esattamente come funzionasse,
ma potresti usarlo per farti passare l'immagine encodata e schiaffarla nel
DOM.
Ah, ecco, qualcosa lo dicono qui:
http://www.elf.org/essay/inline-image.html
Bye.

 
http://www.elf.org/essay/inline-image.html
interessante, ma IE non lo supporta (attualmente intranet = IE-Only) ... ho
trovato soluzioni tipo ripassarla server-side e convertirla ma diventa un
giro incasinato (richiedo immagine, la ricevo base64, verifico errori, se
non ci sono assegno come src una altra pagina aspx che riceve il base64 e
restituisce l'immagine...)
Era quasi più una curiosità, se devo generare tutto questo traffico inutile
resto alla soluzione di creare l'immagine server-side in una dir temp.
Grazie,
Cristiano


 alla creazione del grafico richiesto.
Non mi pare sia questo uno dei casi in cui sia indicato l'uso di
XmlHttpRequest. Ovviamente il quadro generale lo conosci meglio tu, della
tua situazione, ma così da come me ne parli io non opterei per tale
approccio.
Alternativamente, se proprio vuoi seguire la strada dell'XmlHttpRequest,
potresti anche fare due richieste. Una per inviare i dati che ti servono per
generare l'immagine, e poi la richiesta dell'immagine:
	xmlhttp.open(...);
	xmlhttp.send()
	.
	.
	img.src = "createimage.aspx";
I dati potresti salvarli temporaneamente nella sessione, e rimuoverli dopo
aver inviato l'immagine al server in "createimage.aspx".
Oppure, dato che sei in una intranet e già usi ADODB.Stream, se proprio non
vuoi salvarla sul server puoi salvarla sul client. Fai restituire a xmlhttp
l'immagine, e poi con ADODB.Stream accedi alla proprietà responseBody
dell'oggetto xmlhttp, in modo da gestire tutto in binario. Salvi su file nel
computer del client, e poi la ricarichi da lì.
-- 
~ Una volta, qui, era tutto <TABLE>.

 computer del client, e poi la ricarichi da lì.
preferisco evitare di scrivere sul client.
-- 
"Non sai che ci vuol scienza
 ci vuol costanza
 ad invecchiare senza maturità"
									    F.G.

 preferisco evitare di scrivere sul client.
Si, certo. Ma dato che mi avevi detto di avere l'ADODB.Stream abilitato e
l'accesso al filesystem, ti ho sottoposto anche questa soluzione.
-- 
~ Il computer è una macchina progettata per velocizzare e automatizzare
gli errori.

 Cosa, il "createimage.aspx"? 
no, scusami, mi riferivo al perché pensavo ad un modo per non dover creare
i file tmp sul server (pdf, xls, ora jpg...), la Session potrebbe essere la
risposta...resta però il problema di distruggerla (qua ci sono 30 client
con aperta intranet tutto il giorno, se ognuno mi clicca 30 report con
grafico arriviamo a fine serata con 30*30 immagini [non piccole] in ram sul
server). 
Vedo se, dopo aver inviato via stream l'immagine, mi permette subito di
azzerare la Session: se così è allora tutto ok.
Grazie.
-- 
"qualcuno è andato per età
 qualcuno perchè già dottore
 e insegue una maturità, si è sposato, fa carriera
 ed è una morte un po' peggiore"
									    F.G.

 azzerare la Session: se così è allora tutto ok.
Lo facevo in ASP, se non lo si può fare in 
ASP.NET
 la cosa mi preoccupa. :)
-- 
~ "Non si chiama coraggio se non hai paura." ("Bounce")

 Lo facevo in ASP, se non lo si può fare in 
ASP.NET
 la cosa mi preoccupa. :)
la Session sì, ma p.e. se invii un file al client non puoi subito
cancellarlo ... questo avviene però perché in realtà deve attendere la
risposta del client per il salva-esegui etc; in questo caso non dovrebbero
esserci problemi (sia per la img in ram, ancor più per i dati in ram).
ci ragiono, danke


 esserci problemi (sia per la img in ram, ancor piů per i dati in ram).
Non so che oggetto usi per creare l'immagine, ma potrebbe avere anche dei
metodi tipo Save() che accetta come parametro uno stream. In quel caso puoi
dargli direttamente il Response e fa tutto in modo automatico. Al piů
imposti la variabile dell'immagine a null, una volta fatto tutto.
-- 
~ "La malinconia č la felicitŕ di esser tristi." (Victor Hugo)