7 messaggi dal 05 dicembre 2002
www.web-architect.it
Ho un problema per quanto riguada il download di file da un sito in asp (no asp.net) che sto facendo ed è da diversi giorni che ci studio sopra.
Ho un db di access e una tabella in cui memorizzo i nomi dei files che gli utenti caricano che sono di natura eterogenea (pdf, doc, etcc.) ora per consentirne il download, faccio il link al campo col nome del file, passo l'id, e aggiungo il percorso e funziona tutto perfettamente. Il problema sta nel fatto che se l'utente ha sul computer word o Acrobat reader o Excel i file con le estensioni associate si aprono direttamnte nel browser. Ora siccome in alcuni casi ho necessità che questo non avvenga vorrei sapere come fare a forzare il download di certi tipi di files. Leggevo prima in un altro forum dell'oggetto down stream ma mi funziona solo con i dati statici e s'impalla con quelli dinamici.( forse sbaglio qualcosa). Altri mi hanno parlato di settare il MIME type, ma secondo me si ottiene l'effetto inverso. Qualcuno può aiutarmi? sarei molto grato di avere almeno un idea.
Grazie
20 messaggi dal 05 dicembre 2002
www.audiopro.it
Non capisco che intendo quando dici che lo stream ti funziona solo con i dati statici, cmq una funzione per il downlaod potrebbe essere questa, dove strFile da passare alla funzione è il percorso fisico del file sul server:

Function downloadFile(strFile)

dim intFileLength
dim f

Response.Buffer = true
Response.Clear

set objStream = Server.CreateObject ("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary

set objFS = Server.CreateObject ("Scripting.FileSystemObject")

if not objFS.FileExists(strFile) then
' file non trovato
end if

Set f = objFS.GetFile(strFile)
intFileLength = f.size

objStream.LoadFromFile(strFile)
if err then
downloadFile = err.Number
end if

Response.AddHeader "Content-Disposition", "attachment; filename=" & f.name
Response.AddHeader "Content-Length", intFileLength
Response.Charset ="UTF-8"
Response.ContentType = "application/octet-stream"
Response.BinaryWrite objStream.Read
Response.Flush

objStream.Close
set objStream = nothing

End Function

:: Fate i bravi e non clonate le pecore!
:: Distractly yours... manight@ufologia.net
7 messaggi dal 05 dicembre 2002
www.web-architect.it
Salve manight
Ti ringrazio per la tua cortesia. L'ho provato ma forse ho sbagliato. ti spiego meglio la mia situazione. Io nel link principale ho un collegamento alla pagina di download e passo l'id del file! La pagina di download è senza niente, e ho inserito la funzione (col percorso e e il nome del campo del file) dopo il recrdset e prima del tag <html> però il risultato è che mi scrive sulla pagina il testo dlla funzione, ho provato allora a chiudere questa fra <% %> ma il server mi segnala errori di compilazione.

ti faccio vedere.

<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="../../Connections/cnndip.asp" -->
<%
Dim rsdownload__MMColParam
rsdownload__MMColParam = "1"
If (Request.QueryString("id") <> "") Then
rsdownload__MMColParam = Request.QueryString("id")
End If
%>
<%
Dim rsdownload
Dim rsdownload_numRows

Set rsdownload = Server.CreateObject("ADODB.Recordset")
rsdownload.ActiveConnection = MM_cnndip_STRING
rsdownload.Source = "SELECT * FROM bachecafile WHERE id = " + Replace(rsdownload__MMColParam, "'", "''") + ""
rsdownload.CursorType = 0
rsdownload.CursorLocation = 2
rsdownload.LockType = 1
rsdownload.Open()

rsdownload_numRows = 0
%>
Function downloadFile(../../carico/filebacheca/<%=(rsdownload.Fields.Item("id").Value)%>)

dim intFileLength
dim f

Response.Buffer = true
Response.Clear

set objStream = Server.CreateObject ("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary

set objFS = Server.CreateObject ("Scripting.FileSystemObject")

if not objFS.FileExists(../../carico/filebacheca/<%=(rsdownload.Fields.Item("id").Value)%>) then
' file non trovato
end if

Set f = objFS.GetFile(../../carico/filebacheca/<%=(rsdownload.Fields.Item("id").Value)%>)
intFileLength = f.size

objStream.LoadFromFile(../../carico/filebacheca/<%=(rsdownload.Fields.Item("id").Value)%>)
if err then
downloadFile = err.Number
end if




<html>
<head>
<title>Documento senza titolo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
</body>
</html>
<%
rsdownload.Close()
Set rsdownload = Nothing
%>

io come editor utilizzo dreamweawer mx giacche non sono un vero e proprio programmatore ma un architetto. Ti ringrazio se potessi essere ancora cortese e spiegarmi dove sbaglio! Grazie ciao
20 messaggi dal 05 dicembre 2002
www.audiopro.it
Dunque... nella pagina che hai incollato:
1) Non vedo dove finisce la funzione (End Function)
2) Non vedo dove viene richiamata la funzione per il download
3) Si presuppone che i tuoi file si chiamino come l'ID che viene recuperato dal DB, senza neanche l'estensione. Quindi, immagino 1, 56, 3, ecc.

Perchè non usi la funzione che ti ho scritto sopra?
Nel database avrai memorizzato anche un cmapo che contiene il percorso del file immagino dicamo FILE_PATH. Fai così nella pagina destinazione:

INcludi il file con la connessione, e poi:
<%
If Request.Querystring("ID") & "" <> "" Then intFILE_ID = Clng(Request.Querystring("ID") Else intFILE_ID = -1

Set rsdownload = Server.CreateObject("ADODB.Recordset")
rsdownload.ActiveConnection = MM_cnndip_STRING
rsdownload.Source = "SELECT * FROM bachecafile WHERE id = " + Replace(intFILE_ID, "'", "''") + ""
rsdownload.CursorType = 0
rsdownload.CursorLocation = 2
rsdownload.LockType = 1
rsdownload.Open()

If NOT rsdownload.EOF Then
errore = DownloadFile(rsdownload("FILE_PATH")) ' Scarica il file
Else
' FIle non trovato nel DB
End If
If errore <> 0 Then ' #### C'è stato un errore nel download
Response.Redirect("paginaok.asp")

Function downloadFile(strFile)
... qui incolli la funzione che ti ho dato prima
%>


In cima alla funzione che ti ho messo prima devi aggingere:

Function downloadFile(strFile)

dim intFileLength
dim f

downloadFile = 0 ' <<<<<<<<<<<<<<<

.....e modificare:

if not objFS.FileExists(strFile) then
' file non trovato
end if

In

if not objFS.FileExists(strFile) then
downloadFile = -1
end if

Prova... :)
Modificato da manight il 06 dicembre 2002 14.55 -

:: Fate i bravi e non clonate le pecore!
:: Distractly yours... manight@ufologia.net
16 messaggi dal 04 dicembre 2002
Ma non basta un <a href="file://............................"> ??
20 messaggi dal 05 dicembre 2002
www.audiopro.it
Visto che rinvia ad un'altra pagina tramite un ID nella querystring, credo che non voglia rendere pubblico il percorso del file sul server...
Non so inoltre se specificando FILE il browser (nel caso il client abbia installata l'applicazione relativa) lo apre o permette di scaricarlo.

:: Fate i bravi e non clonate le pecore!
:: Distractly yours... manight@ufologia.net
7 messaggi dal 05 dicembre 2002
www.web-architect.it
In effetti ci dev'essere un certo grado di protezione. infatti i file in questione devono ssere scaricati da un area riservata. Ora io faccio fare all'utente l'upload di un file che vuole condividere e memorizzo i dati nel database. nel database ho un campo id e un campo file in cui memorizzo il nome e l'estensione del file. il recors set è filtrato in base all'id della pagina precedente. per cui io ho il record con tutte le indormazioni del file (chi come e quando è stato inserito). il link è composto da una parte fissa che è il percorso sul server ../../folder/ e una parte dinamica che legge il field dov'è memorizzato il nome del file.
Ora io ho provato la tua funzione ma forse è che non sono molto pratico in quanto di solito mi limito a modificare solo pezzi di codice, il risultato è una pagina bianca in cui il test è rappresentato dal corpo della funzione. ho aggiunto l'end function ma no capisco cosa vuoi dire quando la devo chiamare! no dovrebbe essere onload (come in javascript)? Questa cosa mi farà impazzire! anche perchè questa funzione mi è utilissima in altre aree dell'applicazione. Grazie per la tua cortesia.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.