2012-02-14 1 views
0

У меня есть изображение, поступающее с удаленного сервера через http-url. Я хочу сделать некоторый анализ изображения на этом, поэтому я хочу прочитать содержимое изображения в своем java-коде на стороне сервера. Этот код работает внутри сервера tomcat.Сервлет не умеет читать изображение с http-сервера

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 Cargo Van/2012/BP3TT-FULL-EXT/Image [| Ford | E-Series Cargo Van | 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) 

Любой помощи, чтобы прочитать этот файл успешно будет veryhelpful.

+0

код в блоке try, вы можете проверить, возможно ли его компиляция? мое затмение дает ошибку с вашим кодом. У меня есть компилируемый код с несколькими изменениями и он правильно и правильно определяет ширину и высоту изображения. Если вы хотите, я могу вставить код в качестве ответа. – Jasonw

ответ

0

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

URLEncoder.encode (arg0)

+0

Спасибо за ответ. Здесь нет аргументов для URL. Этот URLEncoder не помогает. Пожалуйста, см. Мой ответ на комментарий выше. Не могли бы вы помочь в разрешении этого. – Ashok

+0

@Ashok, я не вижу, чтобы вы использовали API кодирования здесь, выполняете ли вы следующий код michael? ImageIO.read (новый URL (encodedPathURL)) при кодировании URL-адреса обрабатывает символ не-ascii – Ivan

0

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

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

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

+0

Привет, спасибо за ответ. URLEncoder не работает. Он также кодирует http: //. Я пробовал что-то следующим образом, даже это не работает. Не могли бы вы предложить правильный способ этого. URI url = новый URI («http», хост, путь); img = ImageIO.read (url.toURL()); – Ashok

Смежные вопросы