2017-04-07 13 views
0

다음 JavaEE 기반 웹 응용 프로그램을 만들어서 WAR 파일로 내 보낸 다음 VM에서 실행중인 Tomcat 서버에 배포했습니다.HTTP 상태 500 - 입력 파일을 읽을 수 없습니다.

응용 프로그램을 사용하면 이미지를 VM 디스크의 위치로 업로드 한 다음 이전에 업로드 한 파일의 경로를 허용하는 이미지 처리 클래스를 실행할 수 있습니다.

ImageIO.read()를 사용하여 파일에서 버퍼링 된 이미지를 읽으려고합니다.

IDE에서 실행할 때 이미지 처리 클래스가 올바르게 작동하고 디스크에 저장된 이미지를 받아 처리 된 이미지를 출력 할 수 있습니다.

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); 

} 

:이 업로드 된 이미지를 읽어 이미지 처리 클래스의 일부 코드가

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. 

: 배포 된 웹 응용 프로그램으로 액세스 할 때 그러나 나는 오류를 만났다하고 입력 파일 문자열은 다음과 같습니다. C :/Users/SRCMIPS/Desktop/M2/Image Upload/PatientImage.jpeg

프로젝트의 배포 된 WAR로 ImageIO.read와 관련하여 문제가 있습니까? 응용 프로그램이 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/simple-way-to-serve-static-data-outside-the-application-a-java에서) –

답변

0

VM이 시스템 외부에 있습니다. 기본적으로 프로젝트에 이미지 폴더를 만들어 거기서 읽어야합니다 (/ 프로젝트 이름/lib 이름/이미지 이름). imageio.IIOException: Can't read input file

+0

입력 해 주셔서 감사합니다. 어디에 프로젝트 내에서 이미지 폴더가 있어야합니까? war 파일을 내보내고 배포하면 여전히 액세스 할 수 있습니까? – PGH

+0

예, 절대적으로, 단지 데스크톱 응용 프로그램의 전통적인 res 폴더 또는 CSS 폴더의 CSS 스타일 시트를 참조하는 것으로 생각하십시오. 같은 원리가 적용됩니다. – derekjgrove