2011-01-12 18 views
9

Zastanawiam się jaki jest właściwy sposób, aby przejść o pobieranie obrazu z tego RUL byłoby: http://www.hidemyass.com/proxy-list/img/port/7018246/1Groovy pobieranie obrazu z URL

Sposób Próbowałem pobierając ją, pozostawia plik w nieznanym formacie. Bieżący fragment kodu, który przetestowałem, to:

public void download(def address) { 

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

Odpowiedz

17

Czy to działa? Uważam, że powinien:

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

Dzięki Tim, ja również znaleźć odpowiedź bardzo pomocny, tylko mała uwaga: Wygląda jak nie masz zamknięty strumień URL. Jestem po prostu zaczynając Groovy, a słyszałem, że blisko paruje gdy wyjście z zamknięcia więc możemy zmienić kod tak:

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

można uzyskać typ obrazu od ich typu treści - URLConnection.getContentType() lub z bajt 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) 
Powiązane problemy