Newsgroup: it.comp.www.asp
Titolo: AIUTO!!! MIME, LETTURA FILE BINARI E RESPONSE!!!

Salve a tutti!
Devo inviare al client un'immagine tramite pagina asp.
Il codice html e' tipo: <img src="miapagina.asp?unvalore=unvalore">
Nella pagina asp il codice e' tipo:
response.ContentType="image/gif"
poi dovrei leggere il file.gif dall'hardisk in un buffer e spararlo al
client....MA COME?????????!!!!
Le difficolta' in cui mi sono infognato:
Prima di tutto uso il seguente codice:
Set FileObject=CreateObject("Scripting.FileSystemObject")
Set InStream = FileObject.OpenTextFile(nomedelfile.gif,1,true)
buffer = InStream.ReadAll
..per accedere al file e leggerlo....e qui c'e' gia' qualcosa che non va
visto che uso OpenTextFile...il problema e' che nella maledettissima
documentazione e girando mezzo internet NON ho trovato un maledettissimo
esempio o traccia su come leggere file NON DI TESTO!!! e' un segreto??? e'
una di quelle cose che tutti sanno ma a nessuno e' permesso rivelare????!!
chi lo sa! boo!!
Forse cosi funzionera' pure, ma non ne sono sicuro.
E perche non ne sono sicuro?
Perche nella mia enorme ignoranza di asp uso per inviare i dati della gif al
client un ricchissimo:
Response.BinaryWrite buffer
E cosa succede? che si i dati letti dal file vengono inviati al client ma
corrotti perche anche se la spiegazione di BinaryWrite recita': "Writes the
given information to the current HTTP output without any character-set
conversion." il maledetto tra un byte e l'altro mi ci piazza un byte 0 !!!
in unicode!!!!!!
Mentre colto da disperazione ho provato anche il solo e misero
response.write, che pero' tronca il file appena (praticamente dopo 5 byte)
trova un byte non in tabella ascii.
AIUTO SVELATEMI QUESTI MISTERI!!! .)))
GRAZIE DI CUORE



Intanto , penso che tu non abbia messo un tag fondamentale per ricevere file , e
quindi le immagini, cioe; dopo <FORM> devi mettere il tipo di Encription, cosi'
,
<FORM ENCTYPE="multipart/form-data"
ACTION="la pagina che voui.asp" METHOD=POST>
come metodo devi usare il post, perche' con il GET sono convinto che avresti dei
problemi, considerando che il GET a delle limitazioni al numero massimo di Byte
che puoi spedire.
Poi il codice per l'upload, e' il seguente.
<BR><INPUT NAME="picture" TYPE=FILE   ACCEPT="image/*">
<BR> ecc. ecc. qui ci metti il submit >
</FORM>
con "image/*"  puoi uploadare, tutti i file che ti pare, cioe' con tutte le
estensioni che vuoi, se vuoi restringere l'upload solo ai file gif, puoi per
esempio fare "image/gif",  per i jpg "image/jpg" ecc.
Ora, se pensi che sia finito, eh eh eh non hai nemmeno iniziato. nella pagina
dove il POST ti spedisce i dati, (che sono raw data) devi usare la proprieta'
TotalBytes dell'oggetto Request, cosi':
<pre>
<%
FormSize = Request.TotalBytes
FormData = Request.BinaryRead( FormSize )
bnCRFL = cheB( 13 ) & chrB( 10 )
Divider = LEFTB( FormData, INSTRB( FormData, bnCRLF ) - 1 )
DataStart = INSTRB( FormData, bnCRLF & bnCRLF ) + 4
Response.ContentType ="image/gif"
Response.BinaryWrite MIDB ( FormData, DataStart, DataEnd )
%>
</pre>
Questo script, estre i dati dell'immagine dal form, usando la funzione VBScript
INSTRB() , che cerca l'inizio e la fine dell'immagine vera e propria.
normalmente le immagini, iniziano dopo due "a capo" e con una linea cosi
(circa):
---------------------------------------&ce20d227c0232
Contenet-Disposition: form-data; name="picture" ; filename="C:\la mia foto che
ti fa' vedere quanto sono bello.gif"
content-Type: image/gif
GIF89a"
20000000000000000000000000000000000000000000000
qui c'e' tutta l'immagine
che finisce con la stessa cosa con cui era iniziata,
....
....
........
---------------------------------------&ce20d227c0232--
poi il Content-type del response e' usato per specificate il tipo di immagine,
ed infine, il BinaryWrite del Response, manda l'immagine al browser per
visualizzarla.
A questo punto, penso di averti chiarito le idee, purtroppo, per file molto
grossi, non penso che sia conveniente fare cosi' sopratutto se ti devi portare
dietro l'immagine per alcune pagine, ma se la mandi ad un dbase SQL, il tipo di
dati image, puo' contenere dati fino a 2 GB per ogni campo, non e' malissimo.
In linea di massima, c'eri come script, ma forse ti mancava il VBS per separare
l'immafine dal resto della robaccia quando fail il POST.
ciao Spai
P.S. cerca di non scrivere in maiuscolo, molti lo detestano. ;-)