2011-01-12 15 views
9

me pregunto cuál es la forma correcta de ir sobre la descarga de la imagen de esta RUL sería: http://www.hidemyass.com/proxy-list/img/port/7018246/1de imágenes descarga maravilloso de URL

La forma he intentado descargarlo, deja el archivo en un formato desconocido. El fragmento de código actual que probé es:

public void download(def address) { 

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

Respuesta

17

¿Funciona? Creo que debe:

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

Gracias Tim, que también encontró su respuesta muy útil, simplemente pequeña nota: Parece que tienes no corriente URL cerrado. Estoy empezando con Groovy, y he oído que cerca de vapores cuando la salida de cierre por lo que puede cambiar el código de esa manera:

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

Usted puede obtener el tipo de imagen a partir de su tipo de contenido - URLConnection.getContentType() o de bytes matriz:

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