Datei im www vorhanden?
Datei im www vorhanden?
Hallo,
mit
If FileSize("http://www.mydomain.de/bild.jpg")=-1
möchte ich die Existenz einer Datei im Internet abfragen. Entsprechend möchte ich auswerten, ob meine zu einer Datenbank gehörigen Fotos bereits hochgeladen sind oder noch besorgt werden müssen.
Gebe ich zwischen den Gänsefüßchen einen Dateinamen auf der lokalen Festplatte ein, klappt es bestens.
Ich bin gespannt auf eine Lösung und bedanke mich im Voraus!
mit
If FileSize("http://www.mydomain.de/bild.jpg")=-1
möchte ich die Existenz einer Datei im Internet abfragen. Entsprechend möchte ich auswerten, ob meine zu einer Datenbank gehörigen Fotos bereits hochgeladen sind oder noch besorgt werden müssen.
Gebe ich zwischen den Gänsefüßchen einen Dateinamen auf der lokalen Festplatte ein, klappt es bestens.
Ich bin gespannt auf eine Lösung und bedanke mich im Voraus!
staun!
Es ist doch immer wieder unklar, wie schnell man hier eine Antwort bekommen kann. Danke, Icke!
Gegen FTP spricht nichts, sind ja die eigenen Seiten. Werd mich - nachdem ich mich in die Waagerechte begeben habe - mal mit den Parametern beschäftigen, da sind ja bestimmt Paßwort un so nötig.
Ist aber ein Schritt in die richtige Richtung ... Danke
!
Gegen FTP spricht nichts, sind ja die eigenen Seiten. Werd mich - nachdem ich mich in die Waagerechte begeben habe - mal mit den Parametern beschäftigen, da sind ja bestimmt Paßwort un so nötig.
Ist aber ein Schritt in die richtige Richtung ... Danke

Re: staun!
Ich würde sagen: "Nein, ist es nicht".Jet1199 hat geschrieben:Ist aber ein Schritt in die richtige Richtung ... Danke
!
Warum sollte man per FTP schauen wollen, ob eine Datei per Browser
erreichbar ist? Und was, wenn auf dem Server überhaupt kein FTP
läuft?
Ich würde einen HTTP (GET) request auf das entsprechende File
schicken. Kommt ein 404 zurück, existiert die Datei nicht.
Bei vielen Servern kann auch direkt die Dateigröße ermittelt
werden.
Ich weiß, "Anfänger-Forum", aber es gab bereits soviele Beispiele
zum Thema HTTP-Requests, dass ich an dieser Stelle einfach mal
auf die Suche hinweisen möchte, Du wirst sicher fündig werden
und das passende finden.

FTP oder HTTP-Request?
Danke auch für die "zweite" Meinung. Kann ich hier auf Arbeit nicht ausprobieren ... erst heut abend.
Es geht prinzipiell darum, daß ich natürlich eine Auskunft haben möchte, ob ich alle Fotos einer Internetpräsentation habe oder ob Zuarbeiten fehlen. Aber wie weiss das der Zuarbeiter? Bisher schickte ich ihm meine Auswertung (von den Festplattendaten) als PDF, aber wenn er selbst "sofort" schauen könnte wärs natürlich besser.
FTP kann ich problemlos einrichten, diese Lösung klingt gut. Die 404er mit HTTP sehe ich mir aber auf jeden Fall auch an. Nach "HTTP" und "Request" hab ich leider noch nicht gesucht, recherchiert im Forum aber schon.
CU - Jet1199
Es geht prinzipiell darum, daß ich natürlich eine Auskunft haben möchte, ob ich alle Fotos einer Internetpräsentation habe oder ob Zuarbeiten fehlen. Aber wie weiss das der Zuarbeiter? Bisher schickte ich ihm meine Auswertung (von den Festplattendaten) als PDF, aber wenn er selbst "sofort" schauen könnte wärs natürlich besser.
FTP kann ich problemlos einrichten, diese Lösung klingt gut. Die 404er mit HTTP sehe ich mir aber auf jeden Fall auch an. Nach "HTTP" und "Request" hab ich leider noch nicht gesucht, recherchiert im Forum aber schon.
CU - Jet1199

Dafür reicht ein HEAD Request.
Code: Alles auswählen
Procedure WebFileExists(Server$, File$)
If InitNetwork() = #False : Debug "can't init network!" : Else
ServerID = OpenNetworkConnection(Server$, 80)
If ServerID = #False : Debug "can't connect to " + Server$ + " !" : Else
Request$ = "HEAD " + File$ + " HTTP/1.1" + #CRLF$
Request$ + "Host: " + Server$ + #CRLF$
Request$ + "Accepted: */*" + #CRLF$
Request$ + #CRLF$
SendNetworkString(ServerID, Request$)
Buffer$ = Space($FF)
Repeat
inLen = ReceiveNetworkData(ServerID, @Buffer$, Len(Buffer$))
Reply$ + Left(Buffer$, inLen)
Until inLen = #False
If Val(StringField(Reply$, 2, " ")) = 200
;MessageRequester("Datei existiert! (Code '200 OK')", Reply$)
ProcedureReturn #True
EndIf
EndIf
EndIf
EndProcedure
;#############
Server$ = "www.robsite.de"
File$ = "/bilder/banner/getfirefox.gif"
If WebFileExists(Server$, File$)
MessageRequester("", "Datei existiert!")
Else
MessageRequester("", "Datei existiert nicht!")
EndIf
Constant not found: #vk_shit
Zeitkritisch, aber korrektes Ergebnis
Danke @MLK,
hab Deinen Vorschlag realisiert, der FTP-Hinweis sah natürlich einfacher aus, aber es war wohl eben kein pb-Befehl ...
Das Problem: Die Laufzeit. Das Programm hängt fast ständig in der Zeile
inLen = ReceiveNetworkData(ServerID, @Buffer$, Len(Buffer$))
fest. Erst nach zahlreichen Einzelschritten komme ich von der Zeile los, in der ich in der nächsten Runde wieder hängen bleibe.
Ca. 15s je Datensatz, zusätzlich hab ich den Effekt, daß mein Programmfenster weiss und inhaltslos wird. Eine PB-Macke, die ich auch noch nicht im Griff habe, die aber hier ernsthaft stört, da ja ein Fortschrittsbalken so keinen Sinn machen würde ...
hab Deinen Vorschlag realisiert, der FTP-Hinweis sah natürlich einfacher aus, aber es war wohl eben kein pb-Befehl ...
Das Problem: Die Laufzeit. Das Programm hängt fast ständig in der Zeile
inLen = ReceiveNetworkData(ServerID, @Buffer$, Len(Buffer$))
fest. Erst nach zahlreichen Einzelschritten komme ich von der Zeile los, in der ich in der nächsten Runde wieder hängen bleibe.
Ca. 15s je Datensatz, zusätzlich hab ich den Effekt, daß mein Programmfenster weiss und inhaltslos wird. Eine PB-Macke, die ich auch noch nicht im Griff habe, die aber hier ernsthaft stört, da ja ein Fortschrittsbalken so keinen Sinn machen würde ...
Re: Zeitkritisch, aber korrektes Ergebnis
hier würde sich dann die Verwendung von Threads lohnen.Jet1199 hat geschrieben: Ca. 15s je Datensatz, zusätzlich hab ich den Effekt, daß
mein Programmfenster weiss und inhaltslos wird.
Grüße ... Kiffi
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Wenn bei einem HEAD Request auszuschließen ist, dass der Server weniger bytes auf einmal schickt als angefordert, also viel kleinere pakete als in Len(Buffer) festgelegt - DANN könnte man einen kleinen Geschwindigkeitsvorteil durch den austausch von:
mit:
erwirken.
bzw könnte man auch nur die erste zeile mit dem evtl. 200er code abfangen indem man nur die ersten 12 - zur sicherheit 13 - bytes anfordert bzw empfängt:
und schon läufts zig mal schneller 
Code: Alles auswählen
Until inLen = #False
Code: Alles auswählen
Until inLen < Len(Buffer$)
bzw könnte man auch nur die erste zeile mit dem evtl. 200er code abfangen indem man nur die ersten 12 - zur sicherheit 13 - bytes anfordert bzw empfängt:
Code: Alles auswählen
Procedure WebFileExists(Server$, File$)
If InitNetwork() = #False : Debug "can't init network!" : Else
ServerID = OpenNetworkConnection(Server$, 80)
If ServerID = #False : Debug "can't connect to " + Server$ + " !" : Else
Request$ = "HEAD " + File$ + " HTTP/1.1" + #CRLF$
Request$ + "Host: " + Server$ + #CRLF$
Request$ + "Accepted: */*" + #CRLF$
Request$ + #CRLF$
SendNetworkString(ServerID, Request$)
Reply$ = Space(13)
ReceiveNetworkData(ServerID, @Reply$, Len(Reply$))
CloseNetworkConnection(ServerID)
If Val(StringField(Reply$, 2, " ")) = 200
;MessageRequester("Datei existiert! (Code 200 OK)", Reply$)
ProcedureReturn #True
EndIf
EndIf
EndIf
EndProcedure
;#############
Server$ = "www.robsite.de"
File$ = "/bilder/banner/getfirefox.gif"
If WebFileExists(Server$, File$)
MessageRequester("", "Datei existiert!")
Else
MessageRequester("", "Datei existiert nicht!")
EndIf

Constant not found: #vk_shit