14 Stimmen

Groovy Bild von URL herunterladen

Ich frage mich, wie ich das Bild von dieser RUL am besten herunterladen kann: http://www.hidemyass.com/proxy-list/img/port/7018246/1

Bei dem Versuch, die Datei herunterzuladen, wurde sie in einem unbekannten Format gespeichert. Aktuelle Code-Schnipsel, die ich getestet habe, ist:

public void download(def address) {

    def file = new FileOutputStream(address.tokenize("/")[-1])
    def out = new BufferedOutputStream(file)
    out << new URL(address).openStream()
    out.close()
}

23voto

tim_yates Punkte 160397

Funktioniert das? Ich glaube, das sollte es:

public void download(def address) {
  new File("${address.tokenize('/')[-1]}.png").withOutputStream { out ->
    out << new URL(address).openStream()
  }
}

14voto

Vasili Punkte 171

Danke Tim, ich fand deine Antwort auch sehr hilfreich, nur eine kleine Anmerkung: Sieht so aus, als hättest du den URL-Stream nicht geschlossen. Ich fange gerade mit Groovy an, und ich habe gehört, dass es die Streams beim Verlassen der Schließung schließt, so dass wir Code wie das ändern können:

public void download(def address) {
  new File("${address.tokenize('/')[-1]}.png").withOutputStream { out ->
      new URL(address).withInputStream { from ->  out << from; }
  }
}

4voto

Serge Ivamov Punkte 154

Sie können den Bildtyp über den Inhaltstyp abrufen - URLConnection.getContentType() oder aus einem Byte-Array:

content="http://www.google.ru/images/logo.png".toURL().getBytes()
ext=URLConnection.guessContentTypeFromStream(new ByteArrayInputStream(content)).replaceFirst("^image/","")
new File("logo."+ext).setBytes(content)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X