Newsgroup: it.comp.www
Titolo: Forzare download di un file testo.

Salve a tutti. Ho il seguente problema:
vorrei far sì che quando una persona clicca su di un link all'interno di
una pagina html, si possa effettuare il solo download di tale file
qualunque esso sia.
Se infatti un file è ad esempio un html, un txt o un file del quale si
ha il plugin, il browser lo visualizzerà al suo interno.
Io vorrei invece che col semplice click, senza dover scegliere
bottone-destro-->salva link con nome, si potesse fare il download di
tale file.
Ho provato a scrivere un cgi in delphi che fa questo e funziona solo in
parte: infatti mi fa salvare il file ma col nome del cgi.exe come nome
predefinito.
E' quindi possibile modificare qualche  HTTP-Header per fare in modo che
la response non abbia il nome del cgi ma bensì del file che gli faccio
prelevare??

 wrote in message
news:371D2B40...@telcanet.it...

Mi piacerebbe saperlo anche a me, io purtroppo non  ho trovati di metodi per
fare quello che dici.
Il problema e' che il browser e' configurabile (almeno IE4 e 5 e
Navigator4), e se visualizza al suo interno anche roba non HTML (purche'
riesca a gestirla) e' perche' e' l'utente ad averlo chiesto (in realta' e'
la scelta di default). Quindi... come opporsi alla volonta' del navigatore?
Il motivo per cui il tuo cgi "funziona" e' che IE capisce dall'estensione il
tipo di risorsa che scarica (.doc capisce word ecc) e di conseguenza se e'
in grado o meno di gestirla al suo interno. Visto che il tuo cgi ha
un'estensione .exe (non gestibile) tenta di salvarlo. Se tu riuscissi a
cambiargli nome, mettendogli un'estensione .doc, il problema si
riproporrebbe anche tramite cgi, il browser aprirebbe la risorsa word al suo
interno (sempre per "scelta" dell'utente).
Forse si riesce a fare con un JavaScript al posto del normale link al file
(o cgi). Il javascript potrebbe avere un comando che non chiede di aprire
un'URI in una finestra, ma di salvarla in un file. Onestamente dubito che
esista questo comando, ma premettendo che di javascript non ne so molto.
Ricordo infine che con Javascript potrebbero esserci problemi di
compatibilita' tra browser.
Spero' si essere smentito, farebbe molto comodo anche a me risolvere il tuo
stesso problema
Ciao
Maurizio
--
Maurizio Coppari
C.I.R.F.I.D. - University of Bologna
via Galliera 3, 40126  Bologna
e-mail: 
cop...@remove.cirfid.unibo.it
           (please remove remove in reply)

 wrote in message
| news:371D2B40...@telcanet.it...
| >
| > Salve a tutti. Ho il seguente problema:
| >
| > vorrei far sě che quando una persona clicca su di un link all'interno di
| > una pagina html, si possa effettuare il solo download di tale file
| > qualunque esso sia.
se metti un file .zip hai risolto il problema.
ciao
dap

 tale file.
Quello che fa il browser con i file che riceve dipende del mime type
del file, che e' specificato nell' header Content-Type.
Alcuni tipi di file vengono gestiti direttamente dal browser (es. text/html),
altri attraverso programmi esterni (es. filmati, musica, ...), e i
rimanenti vengono salvati su disco.  Di solito si puo' configurare il
browser e decidere quali programmi usare e cosa salvare su disco, pero'
questo lo puo' fare l'utente finale, non il webmaster.
L'unica cosa che si puo' fare e' spedire il file con un mime type che
abbia buone probabilita' di causare il salvataggio su disco, come
per esempio application/octet-stream, oppure spedire un archivio
compresso (application/x-tar,zip,...).  Non si puo' essere sicuri al
100% che funzioni: il browser potrebbe essere configurato per fare
qualche altra cosa con qusti tipi di file, pero' e' difficile.
Nel casi di file compressi con un'estensione standard (.tar, .zip, ...)
il server manda automaticamente il mime type giusto negli header.
Se invece il file finisce in .html e lo si vuole spedire come 
application/octet-stream, bisogna configurare il server HTTP (dipende
dal server usato).  I file senza estensione di solito vengono spediti
come text/plain.
Se il file e' generato da uno script CGI, e' compito dello script generare
anche gli header HTTP, e quindi basta mettere quello che si vuole in
Content-Type (rimane sempre il problema del nome).
Di solito la soluzione piu' semplice e' quella dell'archivio compresso,
soprattutto se i file sono piu' di uno.
	Mauro

 > predefinito.
Annidato da qualche parte nella documentazione del CGI e' scritto
cha la variabile di environment PATH_INFO serve a dare al browser un
suggerimento sul nome del file destinazione.
Quindi, se il link al tuo prog. delphi e':
<A HREF="/cgi-bin/cgi.exe/nome_save_file.ext">click</A>
e il cgi fa lecose per bene con content-type, dovresti ottenere
l'effetto desiderato.
Cheers,
	Alf