Загрузка Java ImageIcon с изображением, обслуживаемым PHP Script - PullRequest
0 голосов
/ 22 января 2010

Мне нужно создать ImageIcon из изображения на удаленном сервере. Когда я загрузил его с URL-адресом вроде http://www.server.com/1.png, он работал нормально.

Но недавно сервер был изменен, так что изображения хранятся вне корневого веб-каталога и должны быть доступны с помощью чего-то вроде http://www.server.com/get_image.php?id=1, где get_image.php выводит правильные заголовки для обслуживания изображения. Когда я создаю ImageIcon с этим типом URL, он не загружается без каких-либо исключений, и getImageLoadStatus () возвращает MediaTracker.ERRORED. Скрипт обслуживания изображений работает нормально из браузера.

Любые идеи о том, как я мог бы сделать эту работу?

Спасибо.

Редактировать: вот код Java.

ImageIcon labelIcon = new ImageIcon(new URL(IMAGE_URL));<br> System.out.println(labelIcon.getImageLoadStatus());

Я также попробовал следующее, но оно тоже не сработало.

ImageIcon labelIcon = new ImageIcon();<br> BufferedImage image = ImageIO.read(new URL(IMAGE_URL));<br> labelIcon.setImage(image);

Редактировать: вот код из get_image.php. $ DB - это объект, включенный в global.php, который используется для взаимодействия с базой данных MySQL. Я подтвердил, что возвращаемым типом MIME является image / png.

<?php
    if (isset($_GET['uid']))
    {
        require_once('./include/global.php');       
        getUpload(intval($_GET['uid']));
    }

    function getUpload($id)
    {
        global $DB;

        $query = "SELECT `name`, `mime_type` FROM `uploads` WHERE `id` = " . $id . " LIMIT 1";
        $arrUpload = $DB->getSingleRecord($query);

        if (count($arrUpload) > 0)
        {
            $file = UPLOADS_ROOT . $arrUpload['name'];
            header("Content-type: " . $arrUpload['mime_type']);
            header("Content-Disposition: filename=" . $arrUpload['name']);
            readfile($file);
        }
        else
        {
            header("HTTP/1.1 404 Not Found");
        }
        die();
    }
?>

Ответы [ 2 ]

0 голосов
/ 22 января 2010

Одна из причин сбоя ImageIcon(URL) заключается в том, что ответ не вернул статус 200. Убедитесь, что URL-адрес не вернул перенаправление (статус 301/302) или около того. Также убедитесь, что имя параметра запроса является правильным. Вы использовали id в URL, но PHP-скрипт ожидает uid.

Чтобы немного поиграть с собой, просто чтобы проверить, какие заголовки ответа фактически получает код Java, попробуйте следующее:

URL url = new URL("http://www.server.com/get_image.php?id=1");
URLConnection connection = url.openConnection();
for (Entry<String, List<String>> header : connection.getHeaderFields().entrySet()) {
    System.out.println(header.getKey() + "=" + header.getValue());            
}
0 голосов
/ 22 января 2010

Сервер может возвращать неверный тип контента: убедитесь, что он правильно установил заголовок типа контента на image/png в ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...