2011-01-12 29 views
9

mi chiedo che cosa il modo corretto di andare su come scaricare l'immagine da questa RUL sarebbe: http://www.hidemyass.com/proxy-list/img/port/7018246/1immagine Groovy scaricare dal URL

Il modo in cui ho provato a scaricarlo, lascia il file in un formato sconosciuto. Lo snippet di codice corrente che ho provato è:

public void download(def address) { 

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

risposta

17

Funziona? Credo che dovrebbe:

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

Grazie Tim, ho anche trovato la tua risposta molto utile, solo piccola nota: Sembra che non avete flusso URL chiuso. Sto iniziando con Groovy, e ho sentito che vicino appanna quando si esce dalla chiusura in modo che possiamo modificare il codice del genere:

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

È possibile ottenere il tipo di immagine dal loro tipo di contenuto - URLConnection.getContentType() o dal 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)