0

長い試行錯誤の末、ようやく に画像をアップロードすることができましたoracle database。少なくとも私のコードはそう言っています。ただし、イメージが正常に作成されたかどうかを確認するために、servlet. を実行するservletと、ブラウザに黒い画面が表示され、他には何も表示されません。servletコードは次のとおりです。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DisplayImage extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException  {
    // TODO Auto-generated method stub
     try {
         Class.forName("oracle.jdbc.driver.OracleDriver");  
         String url = "jdbc:oracle:thin:@localhost:1521:XE";
         Connection con = DriverManager.getConnection(url,"system","root");
            PreparedStatement ps = con.prepareStatement("select image from insertimage");
            ResultSet rs = ps.executeQuery();
            rs.next();
            Blob  b = rs.getBlob("image");
            response.setContentType("image/jpeg");
            response.setContentLength( (int) b.length());
            InputStream is = b.getBinaryStream();
            OutputStream os = response.getOutputStream();
            byte buf[] = new byte[(int) b.length()];
            is.read(buf);
            os.write(buf);
            os.close();
        }
        catch(Exception ex) {
             System.out.println(ex.getMessage());
        }
    } 

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
}

  }

ちなみに、私はこれにまったく慣れていないので、このファイルのアップロードと表示のデモから多大な助けを得ました。 編集: FF からのみ表示すると黒い画面が表示されますが、Eclipse の内部 Web ブラウザーから表示すると、1 つの単語が表示されますupload。非常に奇妙な行動!!

4

1 に答える 1

0

デバッガーを使用するか、コードをトレースして、実行内容を確認します。

Firebug を使用して、応答の内容を確認します。

そして、ブロブから出力ストリームへの読み取りと書き込みを修正しますInputStream.read()。必ずしもすべてのバイトを一度に読み取るとは限りません。実際に読み取られたバイト数を返します。すべてが読み取られたことを示すために、このメソッドが -1 を返すまでループする必要があります。Java IO チュートリアルを読んでください。

于 2012-07-30T15:59:08.473 に答える