Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Как прочитать image по url в сервлете


Автор: oson 4.11.2008, 18:48
Господа.
Вот такая задачка - есть адрес у Google Map - например
Код

http://maps.google.com/staticmap?center=40.714728,-73.998672&zoom=12&size=400x400&key=12345

и возвращает он поток байтов фотографии, потому что если на странице написать
Код

<img src='http://maps.google.com/staticmap?center=40.714728,-73.998672&zoom=12&size=400x400&key=12345'/>

то вырисует именно фоографию.
Я теперь хочу этот поток байтов фотографии получать прямо в своем сервлете, так как мне надо вставить туда определенные данные (из базы данных). То есть на странице у меня чтото вроде
Код

   "<img src='pictureServlet?id=" + Id + "/>" 

А в самом PictureServlet я хочу сделать запрос по адресу
Код

http://maps.google.com/staticmap?center=40.714728,-73.998672&zoom=12&size=400x400&key=12345

и полученный поток байтов направить в HttpServletResponse.
Как это сделать?

Автор: rygel 4.11.2008, 22:27
Так получишь InputStream файла и его content type:
Код

URL url = new URL("http://maps.google.com/staticmap?center=40.714728,-73.998672&zoom=12&size=400x400&key=12345");
URLConnection connection = url.openConnection();
String contentType = connection.getContentType();
InputStream inputStream = connection.getInputStream();


А далее останется лишь перекопировать байты из IS в OS:

Код

response.setContentType(contentType)

ServletOutputStream outputStream = response.getOutputStream();
.....
byte[] buffer = new byte[256];
int n = 0;
while ( (n = inputStream .read(buffer))!=-1) {
      outputStream .write(buffer, 0, n);
}


Все

Автор: necromancer 6.11.2008, 11:59
что бы не изобретать велосипеды работая с потоками и не только, обратите внимания на такую компанию как apache
а именно на их пакет commons.io

Автор: rygel 6.11.2008, 12:48
справедливо. но когда чему-либо учишься полезнее будет разобраться или хотя бы увидеть как из IS скопировать в OS,  нежели взять либу и вызвать метод copy не задумываясь о деталях. (просто мнение... автору темы виднее будет)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)