最近使用jsp連接數(shù)據(jù)庫,插入圖片,遇到了點(diǎn)難題,希望高手能幫我解決!
問題1:我想控制輸入圖片的類型,如只允許插入.bmp , .jpeg 或者 .gif類型的圖片(在程序中判斷,如果是這三種類型中的某一種,則可插入數(shù)據(jù)庫)。
問題2:我的圖片名稱是中文的,我要通過什么方法才能將其轉(zhuǎn)換成二進(jìn)制插入數(shù)據(jù)庫(如果是英文名稱或其他非中文可插入數(shù)據(jù)庫(已測(cè)試),而是中文的圖片名稱則拋出異常)
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對(duì)象
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");
%>
評(píng)論
# re: jsp保存圖片到數(shù)據(jù)庫與顯示問題!求助! 回復(fù) 更多評(píng)論
2008-01-03 10:49 by Jeff Lau可能是字符編碼的問題。你把所有的gb2312改成utf-8試試。
# jsp保存圖片到數(shù)據(jù)庫與顯示問題!求助! 回復(fù) 更多評(píng)論
2008-01-03 13:55 by 龍旋風(fēng)我上面的方法是將圖片轉(zhuǎn)換成二進(jìn)制碼的形式存在數(shù)據(jù)庫中,但是如果是中文的圖片名稱就不行,Jeff Lau 你的意思是不是轉(zhuǎn)換編碼格式:
String filename=request.getParameter("image");
filename=new String(filename.getBytes("8859_1"),"UTF-8");
是這樣嗎??
String filename=request.getParameter("image");
filename=new String(filename.getBytes("8859_1"),"UTF-8");
是這樣嗎??
# re: jsp保存圖片到數(shù)據(jù)庫與顯示問題!求助! 回復(fù) 更多評(píng)論
2008-01-08 20:55 by jackiesmith已經(jīng)驗(yàn)證,將編碼轉(zhuǎn)換成utf-8,沒有用
# re: jsp保存圖片到數(shù)據(jù)庫與顯示問題!求助! 回復(fù) 更多評(píng)論
2008-01-08 20:55 by jackiesmith信息: Server startup in 2125 ms
數(shù)據(jù)庫插入出錯(cuò)!D:\????.jpg (系統(tǒng)找不到指定的文件。)
數(shù)據(jù)庫插入出錯(cuò)!D:\????.jpg (系統(tǒng)找不到指定的文件。)
數(shù)據(jù)庫插入出錯(cuò)!D:\????.jpg (系統(tǒng)找不到指定的文件。)
數(shù)據(jù)庫插入出錯(cuò)!D:\????.jpg (系統(tǒng)找不到指定的文件。)
# re: jsp保存圖片到數(shù)據(jù)庫與顯示問題!求助! 回復(fù) 更多評(píng)論
2008-04-02 12:45 by jackiesmith 是字符編碼的問題,將字符轉(zhuǎn)化成iso-9001就可以了,問題已解決謝謝各位高手!
# re: jsp保存圖片到數(shù)據(jù)庫與顯示問題!求助! 回復(fù) 更多評(píng)論
2012-06-08 15:46 by 5858451
只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
|
||