Newsgroup: it.comp.www.asp
Titolo: SENDBINARY DI ASPUPLOAD e Response.BinaryWrite

Carissimi... vengo a voi con una questione importante.
PROBLEMA: devo fare in modo che l'utente riceva un file solo se una mia
pagina ASP glielo invia, ma non possa segnarsi l'URL per poi ripetere il
download o passarlo ad altri. Inoltre nell'invio del file, devo cambiare
nome allo stesso.
SOLUZIONE: Metto i files in una cartella non condivisa, poi dalla mia pagina
"download.asp" utilizzo ASPUPLOAD (
www.aspupload.com
) per inviare il file.
Aspupload internamente utilizza il metodo Response.BinaryWrite.
MA.... :
Il fatto è che
1) Con IE funziona, ma piu' di due downloads contemporanei non li fa partire
(e questo è il meno), NS invece visualizza il file direttamente nella
finestra del browser... un disastro.
2) DISASTROSO: Se lanci un download da IE, lo cancelli prima della fine, ne
lanci un altro e lo cancelli prima della fine, IE non lancia piu' alcun
download e non naviga piu' neppure sul server da dove i downloads arrivano.
Cioè si blocca, non vanno piu' neppure i links alle pagine normali, a meno
che non si digiti un url di un altro server. Se pero' si chiude la finestra
del browser e la si riapre, si rinaviga tranquillamente e si possono rifare
i downloads. In pratica è come se quella connessione con il server rimanesse
intasata.
3) Dopo aver installato l'ultima patch di IE, 5.50.4522.1800, se clicco
sull'icona del download il browser cerca inspiegabilmente di farmi scaricare
la pagina dove si trova in quel momento, in versione "htm". Es. sono nella
pagina "pippo.asp" e da li' clicco su un link "download.asp?id=xx", anzichè
aprire la finestra di dialogo SAVE AS e il nome del file inviato dalla
pagina "download.asp", il browser apre la finestra di dialogo SAVE AS e
cerca di salvare "pippo.htm". INCREDIBILE. Tutto funziona come ai punti 1 e
2 se invece clicco su SAVE TARGET AS... oppure OPEN IN NEW WINDOWS.
Segue il codice di "download.asp" che si occupa di inviare il file al
browser:
_________________________________________________________
filePath = AUDIO_PATH & FileName
Set FSO = Server.CreateObject("SCRIPTING.FileSystemObject")
if FSO.FileExists(filePath) Then
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.LogonUser "","myUser","myPassword"
Set File = Upload.OpenFile(filePath)
Response.AddHeader "Content-Type","application/octet-stream"
Response.AddHeader "Content-Disposition","attachment;filename=" & FileName
Response.AddHeader "Content-Length", File.Size
Upload.SendBinary filePath,false
Set Upload = nothing
Set Fso = nothing
_________________________________________________________
Ho provato a riscrivermi il codice senza usare ASPUPLOAD ( alla Persits ho
scritto ma non ci capiscono niente e evitano il discorso), ma il
FileSystemObject tratta solo Files di Testo, non posso leggere TOT bytes da
un file e inviarli con Response.SendBinary al browser. E neppure
objectFile.READALL funziona.
Avete qualche idea? E' un problema importantissimo!!!
Voi come fareste???
Grazie di ogni suggerimento.
Claudio

 Aspupload internamente utilizza il metodo Response.BinaryWrite.
Un altro sistema è copiare il file in una directory temporanea, con 
un nome random, passato poi all'utente. Alla fine del download (o 
della connessione) lo script provvede a cancellare il file così 
creato.
-- 
News2000 1.5ß Version 
http://socket2000.8m.com

Si'... pero' se devi gestire moltissimi downloads c'č un overhead
indiscutibilmente troppo elevato.

 indiscutibilmente troppo elevato.
Un altro metodo sarebbe di mettere il file in una directory non 
visibile all'utenza esterna, che per essere trasferito deve PER forza
passare da una lettura binaria fatta da uno script ASP. Ovviamente lo
script richiamato prima di procede al download chiederà i parametri 
necessari allo scaricamento (login e password, o quant'altro.)


 passare da una lettura binaria fatta da uno script ASP.
 E' esattamente quello che ho fatto. Ho usato Response.BinaryWrite in tutti
i modi possibili, ecco gli headers che la mia pagina ASP restituisce al
browser:
   HTTP/1.1 200 OK
   Server: Microsoft-IIS/5.0
   Date: Mon, 13 Nov 2000 16:55:53 GMT
   Content-Disposition: attachment;filename=Ghosted Up.wma
   Connection: close
   Content-Length: 2774724
   Content-Type: application/x-download
   Expires: Mon, 13 Nov 2000 16:55:53 GMT
   Set-Cookie: ASPSESSIONIDQGQQGXVC=DHMPJGLADLLNPDDJOHEACJBO; path=/
   Cache-control: private
I problemi sono due:
 1) Se clicchi sul link direttamente dalla pagina, si apre la finestra di
SAVEAS del browser correttamente, parte il download correttamente, ma se
provi a fare cancel, e poi ripeti il tutto e fai CANCEL ancora, a quel punto
il browser è BLOCCATO. Ovvero su quel sito dal quale proviene il download
non naviga piu'. Ma spegnendo e riaccendendo il browser, il server non ha
nessun problema. E' come se il browser fosse ingolfato dai dati che
arrivano!!!!
2) L'ultimissima PATCH di IE si comporta assurdamente: cliccando sul link
nella pagina, anzichè salvare il file inviato, con il nome indicato in
FILENAME, mette nella casella di SAVEAS il nome della pagina dalla quale si
è cliccato il link, e poi tenta di salvarla in formato HTML.
 Es: su "default.asp" c'è il mio link a "download.asp?idb=51", io clicco sul
link e il browser tenta di salvare "default.htm", e LO SALVA PER DAVVERO!!!!
 Se invece di cliccare sul link, si scrive l'url nella barra degli indirizzi
o si clicca su "SAVE AS...", o su "OPEN IN NEW WINDOW", nessuin problema!!!
Vi prego, aiutatemi, non so piu' dove sbattere la testa... sto controllando
tutti gli headers inviati dal server e mi sembra che non ci sia nulla di
strano!!!
 Grazie!
Claudio
tr...@galactica.it