Schnelles checken ob Bilddateien auf URL verfuegbar sind?

Status
Nicht offen für weitere Antworten.
S

sirbender

Gast
Hi,

Ich will ein schnelles checken haben, das prueft ob Bilddateien auf bestimmter URL wirklich verfuegbar sind und ich sie theoretisch runterladen koennte.

boolean checkURL("http://xyz.com/test.jpg")

dabei sollte:

1. der Server auf den ich zugreife moeglichst wenig belastet werden.
2. Nicht die Bilddatei runtergeladen werden sondern nur gecheckt werden ob dies moeglich ist.
3. Ich will Java SE Libs verwenden und keine Frameworks wie HtmlUnit, etc.

Kann mir jemand helfen?
sb
 

sliwalker

Top Contributor
Hi,

hast Du FTP Zugriff?
-- Dann hol Dir die Dateiliste und prüfe ob deine Datei Dabei ist.

Ist DirectoryListing aktiviert?
Dann hol Dir den Body der Seite des Listings und parse ob Deine datei dabei ist.


Wen beides nicht, kommst Du um einen vollen GET Befehl nicht drumherum, der auch das Bild läd.

greetz
SLi
 
G

Guest

Gast
sliwalker hat gesagt.:
Hi,

hast Du FTP Zugriff?
-- Dann hol Dir die Dateiliste und prüfe ob deine Datei Dabei ist.

Leider nein...nur http://

Ist DirectoryListing aktiviert?
Dann hol Dir den Body der Seite des Listings und parse ob Deine datei dabei ist.

Nein, es handelt sich um generelle Bilddateien im Netz. Ich kann also weder auf FTP support noch directory listing bauen.


Wen beides nicht, kommst Du um einen vollen GET Befehl nicht drumherum, der auch das Bild läd.

Bisher habe ich nur Frameworks verwendet, die mir eine Datei als byte[] oder was auch immer zurueckgeben. Feinkoerniger kann man da doch bestimmt was machen, oder? Direkt GET Anweisungen absetzen und nur z.B. einen Antwortheader erhalten der sagt, dass die Datei da is. Also kein File not found Ergebnis hat?

Wie sehe das als JAva Code aus?
 
M

maki

Gast
Wenn der Server die HEAD methode zulässt, wäre das ein Weg, ist aber unüblich.

Ansonsten fällt mir nix ein.

Warum willst du eigentlich keine fertigen Frameworks verwenden?
 
G

Guest

Gast
maki hat gesagt.:
Wenn der Server die HEAD methode zulässt, wäre das ein Weg, ist aber unüblich.

Ansonsten fällt mir nix ein.

Warum willst du eigentlich keine fertigen Frameworks verwenden?

Nuja gegen Frameworks hab ich eigentlich nichts. Aber handelt es sich um ca. jeweils 10 Bilddateien die ich auf ihre Verfuegbarkeit checken will - derweil muss der User daeumchendrehen?

Bei langsamer Serveranbindung bzw. Rechneranbindung ans Internet kann das ewig dauern. Vielleicht kann ich ja mit GET einfach runterladen, dann aber abbrechen wenn ein paar Byte fliessen? Geht so ein abbrechen? Bring das den Server durcheinander?

Mich wuerden Java-Codebeispiele eines solchen Vorzeitigen Abbruchs intressieren.
 

Escorter

Bekanntes Mitglied
Das abbrechen sollte den Server nicht durch einanderbringen - wie oft wird beim browser abgebrochen werden.
Lass die get Methode laufen und überwache den outputstream in nem eigenem thread. musst mal schauen ob man damit was machen kann. weiß nicht ob es geht aber das wäre das was mir auf anhieb einfällt.

Gruß,
Esco
 

sliwalker

Top Contributor
Hoi,

set den GET-befehl ab und guck in der Antwort nach dem Attribut Content-length. Entweder weißt Du vorher wie groß es ist oder wenn nicht, mss vorher wieviel ein 404 auf deinem Server als Content-Legth hat. Wenn der Wert ungleich ist, ist das Bild wohl da und Du kannst sofort die Verbindung wieder abbrechen.

Das vorgehen ist aber so speziell, dass ich es mir selber schreiben würde und nicht die Klassen von apache verwenden würde, da man die sowieso anpassen müsste. Ohne Authentifizierung und nur ein simpler GET-Befehl ist da schneller selbst geschrieben.

greetz
SLi
 

Triebi

Aktives Mitglied
sirbender hat gesagt.:
Ich will ein schnelles checken haben, das prueft ob Bilddateien auf bestimmter URL wirklich verfuegbar sind und ich sie theoretisch runterladen koennte.
Entweder übersehe ich das Problem, oder du HttpURLConnection#getResponseCode(). http://java.sun.com/javase/6/docs/api/java/net/HttpURLConnection.html#getResponseCode()
200 -> Bild ist da
404 -> ist es nicht.
Die restlichen Statuscodes müssen auch irgendwo einsortiert werden.

Nicht die Bilddatei runtergeladen werden sondern nur gecheckt werden ob dies moeglich ist.
Heruntergeladen wird AFAIK erst, wenn über den InputStream gelesen wird.

Geht so ein abbrechen? Bring das den Server durcheinander?
Kannst ja mal disconnect() versuchen.
Allerdings ist es doch nicht deine Schuld, wenn in Asien ein Unterseekabel reisst, nur weil in China ein Sack Reis umfällt. :)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben