上次我介紹了mysql數(shù)據(jù)庫中存取圖片的方法,詳見:
http://www.aygfsteel.com/fl1429/archive/2009/05/27/278212.html
正好這幾天又用到了sql server 2000數(shù)據(jù)庫,然而在sql 2000中存取圖片和mysql中大部相同,但是思想是一樣的,都是在數(shù)據(jù)庫中存二進(jìn)制,但是還有一種解決方案,就是可以再數(shù)據(jù)庫中存取圖片的路徑,這樣比較簡單,我就不介紹了,為了安全起見,還是把圖片保存到數(shù)據(jù)庫中了.
首先注意在mysql中存的字段類型是 blob類型,而在sql 2000中則用image類型,具體步驟見下:
上傳頁:upload.jsp
<form action="ImageServlet" method="post" name="form1"> <p> </p> <p> </p> <p>頭像上傳:</p> <table width="800" height="136" border="0"> <tr> <td>姓名:</td> <td><input type="text" name="name"> </td> </tr> <tr> <td>上傳圖片:</td> <td><input type="file" name="photo"> (上傳后不可修改)</td> </tr> <tr> <td><input type="submit" name="Submit" value="提交"></td> <td><input type="reset" name="Submit2" value="重置"></td> </tr> </table> </form>
處理的servlet:ImageServlet
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); request.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String name = request.getParameter("name"); String path = request.getParameter("photo"); int len; String query; PreparedStatement pstmt; Connection conn = null; try{ ConnectSqlserver connectSqlserver = new ConnectSqlserver(); conn = connectSqlserver.openConnection(); File file = new File(path); FileInputStream fis = new FileInputStream(file); len = (int)file.length(); query = ("insert into applys(name,photo) VALUES(?,?)"); pstmt = conn.prepareStatement(query); pstmt.setString(1,name); // Method used to insert a stream of bytes pstmt.setBinaryStream(2, fis, len); pstmt.executeUpdate(); }catch(Exception e){ e.printStackTrace(); } out.flush(); out.close(); }
顯示圖片的servlet:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection conn = null; response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); request.setCharacterEncoding("utf-8"); //PrintWriter out = response.getWriter(); byte[] fileBytes; String query = ""; try { ConnectSqlserver connectSqlserver = new ConnectSqlserver(); conn = connectSqlserver.openConnection(); query = "select photo from applys where name = 'feng' "; Statement state = conn.createStatement(); ResultSet rs = state.executeQuery(query); if (rs.next()) { fileBytes = rs.getBytes("photo"); System.out.println(fileBytes); // OutputStream targetFile = new FileOutputStream("d://new.JPG"); ServletOutputStream targetFile = response.getOutputStream(); targetFile.write(fileBytes); targetFile.close(); } } catch (Exception e) { e.printStackTrace(); } //out.flush(); //out.close(); }
顯示圖片的jsp:view.jsp
<td width="152" rowspan="3"><img src="ShowServlet?name=feng" width="140" height="140"></td>
ref:
http://www.java-tips.org/other-api-tips/jdbc/how-to-store-retrieve-image-to-from-sqlserver.html
http://forums.sun.com/thread.jspa?threadID=5361151
http://java.ittoolbox.com/groups/technical-functional/java-l/insert-image-into-sqlserver-sample-program-157642
http://www.java.happycodings.com/JDBC/code3.html
http://www.cnblogs.com/long/articles/166546.html
write by feng |