0

誰でも次のことで私を助けてもらえますか? サーブレットを介して mysql データベースの blob 列に画像を挿入しようとしています。JSPファイルにある「HTML FILE INPUT TYPE」から画像を選択しているので、画像のフルパスが選択されています。

私が得ているエラーは次のとおりです。

HTTP Status 500 - Desert.jpg (The system cannot find the file specified)

type Exception report

message Desert.jpg (The system cannot find the file specified)

description The server encountered an internal error (Desert.jpg (The system cannot find the file specified)) that prevented it from fulfilling this request.

exception

    java.io.FileNotFoundException: Desert.jpg (The system cannot find the file specified)
        java.io.FileInputStream.open(Native Method)
        java.io.FileInputStream.<init>(Unknown Source)
        Image.ImgInsert.doGet(ImgInsert.java:51)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.28 logs.
Apache Tomcat/7.0.28

「Desert.jpg」は私のデスクトップにある画像です。 この同じプログラムは、私の友人のコンピューターでも動作します。 サーブレットのコードは次のとおりです。

    String s_id = request.getParameter("myid");
    int id = Integer.parseInt(s_id);
    //IMAGE ACQUIRED FROM THE FROM THE JSP PAGE
    String img = request.getParameter("myimg");

    File f = new File(img);
    FileInputStream fis = new FileInputStream(f);

    String query="insert into images.imageinsert(id,image) values(?,?)";
    try
    {
        PreparedStatement pStatement = conn.prepareStatement(query);

        pStatement.setInt(1, id);
        pStatement.setBinaryStream(2, fis);
        int result = pStatement.executeUpdate();

        if(result != 0)
        {
            response.sendRedirect("ImageHome.html");
        }
        pStatement.close();

誰か助けてくれませんか?

4

1 に答える 1

3

ここには、少なくとも 2 つの重大な概念上の誤りがあります。

  1. サーバー側でファイルの内容全体を取得するには、クライアント側のローカル ディスク ファイル システム パスがあれば十分だと考えているようです。クライアントとサーバーが同じディスク ファイル システムを共有していないため、これは不可能です (両方が物理的に同じコンピューター上で実行されている場合を除きますが、これはもちろん現実世界では発生しません)。

  2. あなたはjava.ioものの相対パスに依存しています。これは、Web サーバーが開始されたまさにその瞬間に開かれたフォルダーである、いわゆる「現在の作業ディレクトリ」に相対的になります。これは間違いなく、webapplication が直接置かれているフォルダーではありません。これは、たとえばC:\path\to\tomcat\bin. アップロードされたファイルは、魔法のようにそこに配置されているわけではありません。

あなたの「友人」のマシンでなぜそれが動作するのかというと、それは間違いなく彼が使用している Internet Explorer にセキュリティ バグがあり、ファイル名だけでなく完全なファイル パスがフィールドのリクエスト パラメータとして送信されるため<input type="file">です。繰り返しますが、答えたように、このアプローチは実際の運用環境では機能しません。<form>enctype="multipart/form-data"

あなたの具体的な問題は、次の回答を注意深く読むことで理解および解決できます。

于 2012-09-11T19:22:02.207 に答える