2012-02-14 57 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