長い試行錯誤の末、ようやく に画像をアップロードすることができました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
。非常に奇妙な行動!!