Jag har ett antal filer på min webbplats, som användare får ladda ner! Hej, jag har försökt testa flera olika metoder för att köra download via ASP med ADO.STREAM objektet och det verkar inte gå att göra det du önskar. Anledningen är att du inte kan fånga den händelsen från användaren. Nu tror jag du skrivit något fel. Om du sätter Buffer till False på Response stänger du väl av Buffering och data skickas när det skrivs till klienten? Andreas, den koden jag visade var ett klipp från ett 10-tal olika sätt att försöka fixa detta. Att använda isClientConnected verkar inte fungera i detta fall. Det hon vill försöka uppnå är att känna av om man trycker avbryt. Om man trycker avbryt innan den påbörjat nerladningen eller om man ladda ned hela filen verkar det fungerar. Däremot om man valt ett ställe att spara det, påbörjar nedladningeng och sedan avbryter. Låser dig hela webservern. Vet någon varför?nedladdning
Jag är intresserad av att se vilka filer som är mest intressanta att ladda ner, därför
samlar jag "klickningar" i en databas!
För att användaren skall kunna ladda ner, måste givetvis en länk klickas! Jag har löst statisktiken på så vis att när användaren klickar på en länk, registreras detta i en databas.Vilken typ av fil och vilket datum osv.
Men...jag vet ju aldrig om användaren väljer "cancel", eller om nedladdningen verkligen sker fullt ut? Registreringen i databasen är redan gjord, när användaren får dialogrutan för nedladdning!
Den statistik jag får är faktiskt endast: Hur många har klickat på min länk! Nåja sannolikheten att man laddar ner, efter att ha klickat på länken är väl ganska stor!
Men tycker att informationen jag samlar, är missvisande!
Jag har begränsade kunskaper i detta, och undrar nu om detta alls går att kontrollera?
Går det att få något form av svar från en klient till servern, att nedladdning skett!
Tack på förhand /EvaSv: nedladdning
Vad jag förstår så startas allting till webbläsaren när man kör response.flush, i och med detta så går det inte att fortsätta ett script efter detta. Hur det skall lösas kan jag banne mig inte komma på, kanske någon annan kan det?
<code>
<%
Response.Buffer = False
sFileName = "zdtips.zip"
sFullName = Server.MapPath(sFileName)
strFileExt = Lcase(Right(sFileName ,3))
Select Case strFileExt
Case "doc"
strContentType = "application/msword"
Case "xls"
strContentType = "application/x-excel"
Case "ppt"
strContentType = "application/ms-powerpoint"
Case "zip"
strContentType = "application/x-zip-compressed"
Case "pdf"
strContentType = "application/pdf"
Case "gif"
strContentType = "imgage/gif"
Case "jpeg"
strContentType = "image/" & strFileExt
Case "jpg"
strContentType = "image/jpeg"
Case Else
strContentType = "application/x-unknown"
End Select
With Response
Const adReadAll = -1
Const adTypeBinary = 1
TransferFile = "True"
Dim objStream
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile(sFullName)
.AddHeader "content-length", objStream.Size
.ContentType= strContentType
.Addheader "Content-Disposition", "attachment; filename=" & chr(34) & sFileName & chr(34)
Do While Not objStream.EOS or objStream.Cancel
.Binarywrite objStream.Read(8192)
Loop
Set objStream = Nothing
End With
' startar allting egentligen
Response.Flush
' försöker skriva till sidan, men det går inte
Response.Write "Kan vi visa detta eller är körningen slut före det?"
response.Flush
%>
</code>
Hälsningar
/PelleSv: nedladdning
För att kontrollera om klienten laddat ner dokumentet kan du använda IsClientConnected egenskapen.
Jag tror oxå man kan lägga till den i loopen som läser filen och på så sätt kunna avbryta skriptet.
Varför anropar du Cancel metoden på Stream objektet. Utdrag från hjälpen:
Use the Cancel method to terminate execution of an asynchronous method call (that is, a method invoked with the adAsyncConnect, adAsyncExecute, or adAsyncFetch option).
Ser inget behov av en With-sats.
Är ju oxå snyggt att stänga stream objektet.
Har försökt att deklarera alla variabler. Men vet inte om jag missat någon. Option Explicit kommer i så fall ge ett felmeddelande.
<code>
<%
Option Explicit
Dim strFileExt
Dim sFileName
Dim sFullName
Dim strContentType
Dim objconn
Dim objStream
Const adReadAll = -1
Const adTypeBinary = 1
Response.Buffer = False
sFileName = "zdtips.zip"
sFullName = Server.MapPath(sFileName)
strFileExt = Lcase(Right(sFileName, 3))
Select Case strFileExt
Case "doc"
strContentType = "application/msword"
Case "xls"
strContentType = "application/x-excel"
Case "ppt"
strContentType = "application/ms-powerpoint"
Case "zip"
strContentType = "application/x-zip-compressed"
Case "pdf"
strContentType = "application/pdf"
Case "gif"
strContentType = "imgage/gif"
Case "jpeg"
strContentType = "image/" & strFileExt
Case "jpg"
strContentType = "image/jpeg"
Case Else
strContentType = "application/x-unknown"
End Select
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = adTypeBinary
objStream.Open
objStream.LoadFromFile sFullName
Response.ContentType = strContentType
Response.AddHeader "Content-length", objStream.Size
Response.Addheader "Content-Disposition", "attachment; filename=""" & sFileName & """"
Do Until objStream.EOS Or Not Response.IsClientConnected
Response.Binarywrite objStream.Read(8192)
Loop
objStream.Close
Set objStream = Nothing
Set objconn = Server.CreateObject("ADODB.Connection")
objconn.Open
If Response.IsClientConnected Then
objconn.Execute "INSERT INTO TabellNamn (Filnamn, Complet) VALUES ('" & Replace(sFileName, "'", "''") & "', True)"
Else
objconn.Execute "INSERT INTO TabellNamn (Filnamn, Complet) VALUES ('" & Replace(sFileName, "'", "''") & "', False)"
End If
objconn.Close
Set objconn = Nothing
%>
</code>Sv: nedladdning
/PelleSv: nedladdning