배경! jsp+mysql 데이터베이스 필드를 저장하려면 longblob 유형을 사용해야 합니다. 기본 blob 크기가 충분하지 않습니다
. id(char) pic(longblob)
이때 재인쇄할 소스를 표시해 주십시오.
원래 작업 blob을완료해야 합니다
. BLOB를 확인해야 합니다. 이는 매우 번거로운 작업입니다. PEPAREPARESTATATATATATATATATATATATATATATATATATATATATATATATATATATATATATORESTATATATATORESTATOMEMEMEML를
사용하는 것은 그리 번거롭지 않습니다
.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<머리>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>제목 없는 문서</title>
</head>
<본문>
<form action="testblob.jsp" method="post" >
<테이블 너비="291" 테두리="1">
<tr>
<td width="107">ID </td>
<td width="168"><input name="id" type="text" /></td>
</tr>
<tr>
<td>파일</td>
<td><input name="file" type="file" /></td>
</tr>
<tr>
<td><input type="submit" value="제출"/></td>
</tr>
</table>
</form>
</body>
</html>
************************************************** * *************
testblob.jsp
<%@ 페이지 contentType="text/html;charset=gb2312"%>
<%@ 페이지 가져오기="java.sql.*" %>
<%@ 페이지 import="java.util.*"%>
<%@ 페이지 import="java.text.*"%>
<%@ 페이지 import="java.io.*"%>
<html xmlns=" http://www.w3.org/1999/xhtml ">
<머리>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>제목 없는 문서</title>
</head>
<본문>
<%
String id=request.getParameter("id");
String file=request.getParameter("파일");
out.print(id);
out.print(파일);
FileInputStream str=new FileInputStream(파일);
out.print(str.available());
java.sql.Connection 연결;
java.lang.String strConn;
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn= java.sql.DriverManager.getConnection("jdbc:mysql://localhost/test","root","");
String sql="테스트(id,pic) 값에 삽입(?,?)";
준비된Statement pstmt=conn.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.setBinaryStream(2,str,str.available());
pstmt.execute();
out.println("성공, 이미지를 성공적으로 삽입했습니다.");
pstmt.close();
%>
<a href="readblob.jsp">이미지 보기</a>
<a href="postblob.html">반환</a>
</body>
</html>
********************************************** **********
readblob.jsp
<%@ 페이지 contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*, javax.sql.*" %>
<%@ 페이지 import="java.util.*"%>
<%@ 페이지 import="java.text.*"%>
<%@ 페이지 import="java.io.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<머리>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>제목 없는 문서</title>
</head>
<본문>
<%
java.sql.Connection 연결;
결과 집합 rs=null;
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn= java.sql.DriverManager.getConnection("jdbc:mysql://localhost/test","root","");
명령문 stmt=conn.createStatement();
rs=stmt.executeQuery("id='1'인 테스트에서 * 선택");
if(rs.next())
{
블롭 b = rs.getBlob("pic");
int 크기 =(int)b.length();
out.print(크기);
InputStream in=b.getBinaryStream();
바이트[] by= 새 바이트[크기];
response.setContentType("image/jpeg");
ServletOutputStream sos = response.getOutputStream();
int bytesRead = 0;
while ((bytesRead = in.read(by)) != -1) {
sos.write(by, 0, bytesRead);
}
넣다();
sos.flush();
}
%>
</body>
</html>
************************************************** * ******************
참고: sos.write(by, 0, bytesRead);를 사용할 때 이 메서드는 입력 스트림의 내용을 새 페이지에 출력합니다
. 이 페이지에 출력할 다른 콘텐츠가 있으면 위 메서드를 bytesRead = in.read(by))로 변경한
다음 out.print(new String(by)) 메서드를 사용하여 결과를 출력하면 됩니다. 주의 사항 by.toString() 메서드는 출력할 콘텐츠의 메모리 주소를 반환하는 메서드는 사용할 수 없습니다. mysql에는 blob 텍스트 영역 유형이 있는데 크기는 66536입니다. 기본적으로는 작은 것들을 넣어도 충분합니다. 하하. 하지만 이제 디지털 사진이 점점 커지고 있기 때문에 크기는 4g뿐입니다. 영화를 보기에 충분해요. 하하.