废话少说代码伺候:
封装好的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 >