Posted on 2008-01-02 15:50
龍旋風(fēng) 閱讀(2008)
評論(6) 編輯 收藏
最近使用jsp連接數(shù)據(jù)庫,插入圖片,遇到了點(diǎn)難題,希望高手能幫我解決!
問題1:我想控制輸入圖片的類型,如只允許插入.bmp , .jpeg 或者 .gif類型的圖片(在程序中判斷,如果是這三種類型中的某一種,則可插入數(shù)據(jù)庫)。
問題2:我的圖片名稱是中文的,我要通過什么方法才能將其轉(zhuǎn)換成二進(jìn)制插入數(shù)據(jù)庫(如果是英文名稱或其他非中文可插入數(shù)據(jù)庫(已測試),而是中文的圖片名稱則拋出異常)
1.數(shù)據(jù)庫:denglu ,用戶名: sa 密碼: sa
表sql: CREATE TABLE [dbo].[picturenews] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[image] [image] NULL ,
[content] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
[detail] [varchar] (5000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
2.test.jsp頁面,前臺(tái)圖片的輸入
<HTML>
<HEAD>
<TITLE>存儲(chǔ)圖片</TITLE>
</HEAD>
<body>
<!-- 下面的窗體將以Post方法,將數(shù)據(jù)傳遞給testimage.jsp文件 -->
<FORM METHOD=POST ACTION="testimage.jsp">
新 聞 標(biāo) 題:<INPUT TYPE="text" NAME="content"><BR>
新 聞 圖 片:<INPUT TYPE="file" NAME="image"><BR>
新聞內(nèi)容:
<TEXTAREA name="txtmail" rows="15" cols="90"
style="BORDER-BOTTOM: #000000 1px solid; BORDER-LEFT: #000000 1px solid;
BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; FONT-SIZE: 9pt;
HEIGHT: 200px; WIDTH: 100%" wrap="physical" ></TEXTAREA><br>
<INPUT TYPE="submit"></form>
</body>
</HTML>
3.testimage.jsp文件是用來將圖片數(shù)據(jù)存入數(shù)據(jù)庫中。
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.io.*"%>
<html>
<body>
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//加載驅(qū)動(dòng)程序類
Connection con=DriverManager.getConnection("jdbc:odbc:denglu","sa","sa");
//建立數(shù)據(jù)庫聯(lián)機(jī),其中denglu為數(shù)據(jù)庫名,sa為連接數(shù)據(jù)庫的帳號(hào)及密碼。
Statement stmt=con.createStatement();
//建立Statement對象
String content=request.getParameter("content");
content=new String(content.getBytes("8859_1"),"gb2312");
String filename=request.getParameter("image");
filename=new String(filename.getBytes("8859_1"),"gb2312");
String detail=request.getParameter("txtmail");
detail=new String(detail.getBytes("8859_1"),"gb2312");
//獲得所要顯示圖片的標(biāo)題、存儲(chǔ)路徑、內(nèi)容,并進(jìn)行中文編碼
FileInputStream str=new FileInputStream(filename);
String sql="insert into picturenews(content,image,detail) values(?,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1,content);
pstmt.setBinaryStream(2,str,str.available());
pstmt.setString(3,detail);
pstmt.execute();
//將數(shù)據(jù)存入數(shù)據(jù)庫
out.println("Success,You Have Insert an Image Successfully");
%>