废话少说代码伺候:
封装好的ImageUtil类:目的读取本地的图片文件并存入数据库,然后读出数据库中以Blob形式存储的图片保存到指定目录。
1 package org.blog.util; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 public class ImageUtil { 8 private static File file = null ; 9 /* * 10 * 读取图像的二进制流 11 * 12 * @param infile 13 * @return 14 */ 15 public static FileInputStream getByteImage(String infile) { 16 FileInputStream inputImage = null ; 17 file = new File(infile); 18 try { 19 inputImage = new FileInputStream(file); 20 } catch (FileNotFoundException e) { 21 e.printStackTrace(); 22 } 23 return inputImage; 24 } 25 /* * 26 * 输出图片 27 * @param inputStream 28 * @param path 29 */ 30 public static void readBlob(FileInputStream inputStream, String path) { 31 try { 32 FileOutputStream fileOutputStream = new FileOutputStream(path); 33 byte [] buf = new byte [ 1024 ]; 34 int len = 0 ; 35 while ((len = inputStream.read(buf)) != - 1 ) { 36 fileOutputStream.write(buf, 0 , len); // 写 37 } 38 inputStream.close(); 39 fileOutputStream.close(); 40 } catch (FileNotFoundException e) { 41 e.printStackTrace(); 42 } catch (IOException e) { 43 e.printStackTrace(); 44 } 45 } 46 }
从数据库中读出二进制流显示到jsp页面:
servlet源码:
1 package servlet; 2 import java.io.ByteArrayInputStream; 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.OutputStream; 7 import java.io.PrintWriter; 8 import java.sql.Blob; 9 import javax.servlet.ServletException; 10 import javax.servlet.ServletOutputStream; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 import org.blog.util.ImageUtil; 15 import org.hibernate.Hibernate; 16 public class Image extends HttpServlet { 17 private static final long serialVersionUID = 1L ; 18 @Override 19 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 20 throws ServletException, IOException { 21 this .doPost(req, resp); 22 } 23 @Override 24 protected void doPost(HttpServletRequest req, HttpServletResponse resp) 25 throws ServletException, IOException { 26 try { 27 FileInputStream in = ImageUtil.getByteImage( " D:\\me.jpg " ); 28 Blob blob = Hibernate.createBlob( in ); 29 InputStream inputStream = blob.getBinaryStream(); // IO流 30 int length = ( int ) blob.length(); 31 byte [] b = new byte [length]; 32 inputStream.read(b, 0 , length); 33 PrintWriter out = resp.getWriter(); 34 InputStream is = new ByteArrayInputStream(b); 35 int a = is .read(); 36 while (a != - 1 ) { 37 out .print(( char ) a); 38 a = is .read(); 39 } 40 out .flush(); 41 out .close(); 42 /* OutputStream outputStream = resp.getOutputStream();// 从response中获取getOutputStream 43 outputStream.write(b);// 写 44 inputStream.close(); 45 outputStream.close(); */ 46 } catch (Exception e) { 47 System. out .println( " error " ); 48 } 49 } 50 }
jsp源码:
1 <% @ page language = " java " import = " java.util.* " pageEncoding = " UTF-8 " %> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme() + " :// " + request.getServerName() + " : " + request.getServerPort() + path + " / " ; 5 %> 6 <! DOCTYPE HTML PUBLIC " -//W3C//DTD HTML 4.01 Transitional//EN " > 7 < html > 8 < head > 9 < base href = " <%=basePath%> " > 10 11 < title > My JSP ' image.jsp ' starting page </ title > 12 13 < meta http - equiv = " pragma " content = " no-cache " > 14 < meta http - equiv = " cache-control " content = " no-cache " > 15 < meta http - equiv = " expires " content = " 0 " > 16 < meta http - equiv = " keywords " content = " keyword1,keyword2,keyword3 " > 17 < meta http - equiv = " description " content = " This is my page " > 18 <!-- 19 < link rel = " stylesheet " type = " text/css " href = " styles.css " mce_href = " styles.css " > 20 --> 21 </ head > 22 23 < body > 24 < div style = " border: solid red ; " mce_style = " border: solid red ; " > < img src = " image.do " mce_src = " image.do " ></ div > 25 </ body > 26 </ html >