こんばんは(-"-)
DBから画像データを取得し、JSPで表示するプロジェクトを作成中です。
指定したID番号でに紐づく画像をテーブルから取得したいと思ってます。
以下のソースで実行すると、
「画像ファイル"http://localhost:8080/******は壊れているため、表示できませんでした」
と出てくるのですが、確認した所、画像ファイルに破損は見られず、他の画像ファイルでも試したところ、同様のエラーが出てきました((+_+))
勉強不足で恐縮ですが、解決策がありましたら、ご教授頂けると幸いです。。。
【環境】
・JSP
・Java
・Tomcat
・MYSQL
【テーブル】
imgtable
【カラム】
ID プライマリーキー
filename 画像データの基のファイル名
image 画像データ
servlet
package servlet;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.Fileselect;
@WebServlet("/Fileconfirmation")
public class Fileconfirmation extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //IDの取得 String ID = request.getParameter("ID"); //取得したIDに紐づく画像データをDBから取得 Fileselect dao = new Fileselect(); BufferedImage BIMG = dao.selectImageById(Integer.parseInt(ID)); //画像を返す response.setContentType("image/jpeg"); OutputStream OS = response.getOutputStream(); ImageIO.write(BIMG, "jpg", OS); OS.flush(); }
}
dao
package dao;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.imageio.ImageIO;
public class Fileselect {
private String url = "jdbc:mysql://localhost:3306/test";
private String user = "";
private String passwd = "";
public BufferedImage selectImageById(int ID){ Connection con = null; try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection(url, user, passwd); //SQL文の作成 String sql = "SELECT FROM `imgtable` WHERE ID = ?;"; //SELECTを実行 PreparedStatement ps = con.prepareStatement(sql); ps.setInt(1, ID); ResultSet rs = ps.executeQuery(); //データの取り出し if(rs.next()){ while(rs.next()){ InputStream is = rs.getBinaryStream("image"); BufferedInputStream bis = new BufferedInputStream(is); return ImageIO.read(bis); } } }catch (IOException | SQLException | ClassNotFoundException e) { e.printStackTrace(); } return null; } }
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/04 04:54
2016/05/05 14:19
2016/05/06 13:31