2017-04-07 11 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

プロジェクトの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-as-a-java) –

答えて

0

VMはシステムの外部にあります。基本的には、プロジェクトにイメージフォルダを作成してそこに読み込む必要があります(/ project name/lib name/image name)。

また、この問題について議論し、このstackoverflowの質問参照してください。 imageio.IIOException: Can't read input file

+0

ありがとうございます。プロジェクト内でイメージフォルダはどこにあるはずですか? warファイルをエクスポートして展開すると、それでもアクセスできますか? – PGH

+0

はい、絶対に、デスクトップアプリケーションの伝統的なresフォルダ、またはcssフォルダ内のCSSスタイルシートを参照すると考えてください。同じ原則が適用されます。 – derekjgrove

関連する問題