Как использовать HTTP GET для получения изображения из Google Chart API и хранения на сервере?

Может ли кто-нибудь сказать мне, знают ли они, как использовать Google Chart API для хранения изображения, возвращенного в файловой системе, а не для включения в веб-страницу?

Моя ситуация такова, что я бы хотел, чтобы Java-сервлет или прослушиватель запускался через регулярные промежутки времени на сервере Apache Tomcat, чтобы выполнять HTTP-запросы GET / POST к Google Chart API и сохранять полученные изображения в файловой системе или базе данных приложения. Позже изображения будут размещены на HTML-страницах.

Предположительно я смотрю на что-то вроде этого:

String result = null;
URL url = new URL(urlStr);
URLConnection conn = url.openConnection ();

BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = rd.readLine()) != null)
{
    sb.append(line);
}
rd.close();
result = sb.toString();

Где результат - изображение, которое можно записать в файл или базу данных? Но где какой-то вывод, возможно, придется вырезать.

Любые советы приветствуются.

Мистер Морган.


person Mr Morgan    schedule 30.06.2010    source источник


Ответы (2)


Напишите программу, которая открывает HTTP-соединение с URL-адресом Google Chart API, например http://chart.apis.google.com/chart?Cht=p3&chd=t:60,40&chs=250x100&chl=Hello|Мир

Прочтите поток ответа и запишите его в FileOutputStream

Если вам нужна более конкретная помощь, чем эта, напишите комментарий или обновите вопрос, задав более конкретные вопросы :-)

РЕДАКТИРОВАТЬ:

Поскольку это двоичные данные, а не текстовые, не используйте Readers - вместо этого работайте напрямую с InputStream. Считывает байты во временный буфер и записывает их в FileOutputStream.

person ob1    schedule 30.06.2010
comment
Спасибо. Попробую позже. Альтернативой является запрос изображений при загрузке страницы, что может означать частые повторяющиеся запросы. - person Mr Morgan; 30.06.2010
comment
В любом случае будет запрос на изображение от клиента - либо на ваш сервер, либо напрямую на сервер Google. Возможно, вы можете предположить, что Google обрабатывает проблемы с трафиком и кешированием лучше, чем вы, и не беспокоиться об этом ... - person ob1; 30.06.2010
comment
Возможно. Но я бы хотел избавиться от ненужных повторных запросов. - person Mr Morgan; 30.06.2010
comment
Он работает довольно хорошо, и я могу указать имена файлов, что полезно. Спасибо за помощь. - person Mr Morgan; 30.06.2010

Запросите изображение непосредственно с сервера (например, используя cURL или аналогичный), вместо того, чтобы вставлять <img src...>. Когда вы получите изображение, сохраните его на своем сервере и сделайте ссылку на эту локальную версию.

Однако проверьте условия лицензии Chart API, чтобы узнать, разрешено ли вам это делать.

person Piskvor left the building    schedule 30.06.2010