Groovy скачать изображение с URL - PullRequest
11 голосов
/ 13 января 2011

Мне интересно, каким будет правильный способ загрузки изображения из этого правила: http://www.hidemyass.com/proxy-list/img/port/7018246/1

Способ, которым я пытался загрузить его, оставляет файл в неизвестном формате. Текущий фрагмент кода, который я протестировал:

public void download(def address) {

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

Ответы [ 3 ]

19 голосов
/ 13 января 2011

Это работает? Я считаю, что это должно:

public void download(def address) {
  new File("${address.tokenize('/')[-1]}.png").withOutputStream { out ->
    out << new URL(address).openStream()
  }
}
10 голосов
/ 19 декабря 2012

Спасибо, Тим, я также нашел ваш ответ очень полезным, просто небольшая заметка: похоже, вы не закрыли поток URL.Я только начинаю с Groovy, и я слышал, что он закрывает пары при выходе из закрытия, чтобы мы могли изменить код следующим образом:

public void download(def address) {
  new File("${address.tokenize('/')[-1]}.png").withOutputStream { out ->
      new URL(address).withInputStream { from ->  out << from; }
  }
}
2 голосов
/ 14 ноября 2014

Вы можете получить тип изображения по типу контента - URLConnection.getContentType () или из байтового массива:

content="http://www.google.ru/images/logo.png".toURL().getBytes()
ext=URLConnection.guessContentTypeFromStream(new ByteArrayInputStream(content)).replaceFirst("^image/","")
new File("logo."+ext).setBytes(content)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...