2012-02-14 24 views
0

我有一個圖像來自遠程服務器通過http url。我想對此做一些圖像分析,所以我想在我的服務器端Java代碼中讀取圖像內容。這段代碼在tomcat服務器中運行。servlet無法從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路徑的例子是 - 「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 2012-02-14 08:19:33

回答

0

在瀏覽器中輸入時,瀏覽器幫助你做一些工作。爲了訪問它,請先嚐試在你的代碼中編碼url(以便轉義某些特定的字符,如/,空白)。一個可選的API是,

URLEncoder.encode(arg0中)

+0

感謝您的回覆。這裏沒有URL的參數。這URLEncoder沒有幫助。請參閱我對上述評論的回覆。你能幫忙解決這個問題嗎? – Ashok 2012-02-14 08:36:28

+0

@Ashok,我沒有看到你在這裏使用編碼API,你是否按照給出的代碼邁克爾? ImageIO.read(新URL(encodedPathURL)) 當對url進行編碼時,它只會處理非ascii字符 – Ivan 2012-02-14 13:10:40

0

這可能是Tomcat的是在URL中的空白窒息。嘗試將String urlPath編碼爲Tomcat可以理解的內容。

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

,並呼籲ImageIO.read(新URL(encodedPathURL))時,使用正確編碼字符串encodedPathURL。

+0

嗨,感謝您的回覆。 URLEncoder不起作用。它也編碼http://。我嘗試了一下如下,即使這不起作用。你能提出一個正確的方法來解決這個問題嗎? URI url = new URI(「http」,host,path); img = ImageIO.read(url.toURL()); – Ashok 2012-02-14 08:33:15