Benutzer mit den meisten Antworten
Dateidownload via http - Cache greift beim 2ten Download

Frage
-
Ich lade Dateien über eine Zusammengesuchte/Gebaute Function herunter
Das funtioniert auch sehr gut - nur beim erneuten herunterladen wird scheinbar die Datei aus einem Cache genommen(IE...?)
wie kann ich das hier erzwingen das ich die Datei wirklich NEU herunter lade
Public Function DateidownloadADOStream(ByVal strDateiadresse As String, ByVal strZieladresse As String, MitFehlermeldung As Boolean) As Boolean On Error GoTo Fehler Dim oHttp, sURL, sSavePath, oStream Set oHttp = CreateObject("Microsoft.XMLHTTP") oHttp.Open "GET", strDateiadresse, False oHttp.setRequestHeader "Content-Type", "image/multipart" oHttp.Send If oHttp.ReadyState = 4 And oHttp.Status = 200 Then Set oStream = CreateObject("adodb.stream") oStream.Type = 1 '1=adTypeBinary oStream.Open oStream.Write oHttp.responseBody oStream.SaveToFile strZieladresse, 2 '2=adSaveCreateOverWrite, 1=adSaveCreateNotExist Set oStream = Nothing End If oHttp.Abort Set oHttp = Nothing DateidownloadADOStream = True Exit Function Fehler: DateidownloadADOStream = False If MitFehlermeldung = True Then MsgBox Err.Number & vbCrLf & "Fehlerbeschreibung: " & Err.Description & vbCrLf & "Dateiname: " & strDateiadresse End Function
Antworten
-
Hi,
ich würde zum einen WinHttp.WinHttpRequest.5.1 anstelle von Microsoft.XMLHTTP instanzieren.
Dann ggfs. noch einen oder mehrere Header setzen, um den Server anzuweisen, nicht zu cachen bzw. das Element nicht aus dem Cache zu senden.
oHttp.setRequestHeader "Cache-control", "no-cache"
Falls das auch nicht hilft, schick einen Zufallsgenerierten String (oder irgendwas anderes eindeutiges) als QueryStringParameter mit. Bspw. dann so:
oHttp.Open "GET", strDateiadresse & "&a=<Zufallswert>", False
& ggfs. durch ? ersetzen, falls der URL noch keine QueryString Parameter hat (also kein ?... vorkommt)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert MCDPone Freitag, 9. März 2018 13:11
Alle Antworten
-
Hi,
ich würde zum einen WinHttp.WinHttpRequest.5.1 anstelle von Microsoft.XMLHTTP instanzieren.
Dann ggfs. noch einen oder mehrere Header setzen, um den Server anzuweisen, nicht zu cachen bzw. das Element nicht aus dem Cache zu senden.
oHttp.setRequestHeader "Cache-control", "no-cache"
Falls das auch nicht hilft, schick einen Zufallsgenerierten String (oder irgendwas anderes eindeutiges) als QueryStringParameter mit. Bspw. dann so:
oHttp.Open "GET", strDateiadresse & "&a=<Zufallswert>", False
& ggfs. durch ? ersetzen, falls der URL noch keine QueryString Parameter hat (also kein ?... vorkommt)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert MCDPone Freitag, 9. März 2018 13:11
-
Jupp so geht es Danke musste nur noch das
oHttp.ReadyState = 4
rausnehmen da es das wohl in WinHttp.WinHttpRequest.5.1 nicht gibt also 1x im ganzen wer es auch benötigt
Public Function DateidownloadADOStream(ByVal strDateiadresse As String, ByVal strZieladresse As String, MitFehlermeldung As Boolean) As Boolean On Error GoTo Fehler Dim oHttp, sURL, sSavePath, oStream Set oHttp = CreateObject("WinHttp.WinHttpRequest.5.1") oHttp.Open "GET", strDateiadresse & "?a=" & Int((1000000 - 1 + 1) * Rnd + 1), False oHttp.setRequestHeader "Cache-control", "no-cache" oHttp.Send If oHttp.Status = 200 Then Set oStream = CreateObject("adodb.stream") oStream.Type = 1 '1=adTypeBinary oStream.Open oStream.Write oHttp.responseBody oStream.SaveToFile strZieladresse, 2 '2=adSaveCreateOverWrite, 1=adSaveCreateNotExist Set oStream = Nothing Else End If oHttp.Abort Set oHttp = Nothing DateidownloadADOStream = True Exit Function Fehler: DateidownloadADOStream = False If MitFehlermeldung = True Then MsgBox Err.Number & vbCrLf & "Fehlerbeschreibung: " & Err.Description & vbCrLf & "Dateiname: " & strDateiadresse End Function
-
Hi,
den Aufruf von Abort kannst/solltest Du dir sparen. Der ist in deinem Fall unnötig, da der Request eh schon durch ist und einen harten Abbruch sollte man eh nur im Ausnahmefall durchführen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community