сервлет не может прочитать изображение с http-сервера - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть изображение с удаленного сервера через http URL. Я хочу провести некоторый анализ изображений, поэтому хочу прочитать содержимое изображения в своем Java-коде на стороне сервера. Этот код выполняется внутри сервера Tomcat.

    public ImageTrimmer(String urlPath) {
        imageSrc = urlPath;
        try {
           Image img = ImageIO.read(new URL(imageSrc));  // throws the exception
            img.getRGB(0, 0);
        } catch (IOException e) {
            throw new RuntimeException( "Problem reading image", e );
        }
    }

URL для изображения может быть любым действительным URL, который возвращает изображение. Пример пути URL-адреса - "http://build.ford.com/dig/Ford/E-Series Грузовой фургон / 2012 / BP3TT-FULL-EXT / Image [| Ford | Грузовой фургон серии E | 2012 | 1 | 1. | .E1E..YZ ... 89E.BS1 .CB1.] / EXT / 1 / vehicle.png».

Вот исключение, которое я получаю при чтении изображения

java.io.IOException: Server returned HTTP response code: 505 for URL: http://build.ford.com/dig/Ford/E-Series Cargo Van/2012/BP3TT-FULL-EXT/Image[|Ford|E-Series Cargo Van|2012|1|1.|.E1E..YZ...89E.BS1.CB1.]/EXT/1/vehicle.png

        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
        at java.net.URL.openStream(URL.java:1010)
        at javax.imageio.ImageIO.read(ImageIO.java:1367)

Любая помощь в прочтении этого изображения будет очень полезной.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2012

Возможно, Tomcat задыхается от пробела в URL. Попробуйте кодировать строковый urlPath, чтобы Tomcat мог его понять.

String encodedPathURL;
try
{
  encodedPathURL = java.net.URLEncoder().encode(urlPath, "UTF-8");
}
catch(UnsupportedEncodingException exception)
{
  //Exception handling here
}

и использование правильно закодированной String encodedPathURL при вызове ImageIO.read (новый URL (encodedPathURL)).

0 голосов
/ 14 февраля 2012

При наборе текста в браузере браузер помогает вам выполнить некоторую работу.Чтобы получить к нему доступ, попробуйте сначала закодировать URL в вашем коде (чтобы избежать какого-то определенного символа, например /, пробел).Один необязательный API:

URLEncoder.encode (arg0)

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