2017-04-07 64 views
0

我已经创建了一个基于JavaEE的Web应用程序,然后我将其作为WAR文件导出并部署到在VM上运行的tomcat服务器。HTTP状态500 - 无法读取输入文件

该应用程序允许用户将映像上传到vm磁盘上的某个位置,然后运行一个图像处理类,该类接受先前上传的文件的路径。

我正在尝试使用ImageIO.read()作为缓冲图像读取文件。

在IDE中运行时,图像处理类工作正常,并且能够接受存储在磁盘上的图像并输出处理后的图像。但是访问它作为一个部署的Web应用程序时,我遇到了错误:

HTTP Status 500 - Can't read input file! 

type Exception report 
message Can't read input file! 
description The server encountered an internal error that prevented it from fulfilling this request. 
exception 
javax.imageio.IIOException: Can't read input file! 
    javax.imageio.ImageIO.read(Unknown Source) 
    upload.servlet.resizeImageAndSaveSobel2.sobelFilter(resizeImageAndSaveSobel2.java:22) 
    upload.servlet.resizeImageAndSaveSobel2.processImage(resizeImageAndSaveSobel2.java:14) 
    upload.servlet.RunTongue.doPost(RunTongue.java:24) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
note The full stack trace of the root cause is available in the Apache Tomcat/9.0.0.M13 logs. 

这是它是图像处理类,上传的图片中读取的部分代码:

public void sobelFilter(String input, String output) throws IOException { 
    File inputFile = new File(input); 
    BufferedImage img = ImageIO.read(inputFile); 
    ImageReader ir = new ImageReader(); 
    BufferedImage sobelImg = ir.greyscale(img); 
    File outputFile = new File(output); 
    ImageIO.write(sobelImg, "jpg", outputFile); 

} 

输入文件字符串如下:C:/ Users/SRCMIPS/Desktop/M2/Image Upload/PatientImage.jpeg

这是一个关于ImageIO.read的问题,带有项目的部署WAR? 应用程序是否无法从位于vm上的路径读取图像?

任何有关这个问题的解决方案的指导将不胜感激。

+0

把一个破发点中的'sobelFilter'方法和检查'input'。这很可能是错误的。 – VHS

+0

您必须配置Tomcat以提供外部静态数据。请参考这个。 [链接](http://www.moreofless.co.uk/static-content-web-pages-images-tomcat-outside-war/) –

+0

@PGH也希望这个帮助[链接](http:// stackoverflow。 com/questions/1812244/simplest-way-to-serve-static-data-from-application-server-in-a-java) –

回答

0

虚拟机在系统外部。您需要基本上在您的项目中创建一个图像文件夹并让它读取(/项目名称/库名称/图像名称)。

也请看到这个计算器的问题,讨论这个问题: imageio.IIOException: Can't read input file

+0

感谢您的意见。项目中的图像文件夹应该在哪里?一旦我导出并部署了战争文件,它仍然可以访问吗? – PGH

+0

绝对是,只要将它想象成桌面应用程序中的传统res文件夹,或者在css文件夹中引用css样式表即可。同样的原则适用。 – derekjgrove

相关问题