hibernate3.3.2学习笔记---将图片从本地读到数据库里

来源:互联网 发布:javascript 引号 转义 编辑:程序博客网 时间:2024/06/06 23:46

首先要在数据库建张表


web.xml 中核心内容

   <servlet>    <servlet-name>FileUploadServlet</servlet-name>    <servlet-class>servlet.FileUploadServlet</servlet-class>   </servlet>     <servlet-mapping>   <servlet-name>FileUploadServlet</servlet-name>   <url-pattern>/servlet/FileUploadServlet</url-pattern> </servlet-mapping>
在传图片的jsp中核心代码:
    <form method="post"   action="${pageContext.request.contextPath}/servlet/FileUploadServlet"  enctype="multipart/form-data">     图片:<input type="file" name="picture"><br/>    <input type="submit"  name="提交">      </form>   
然后就是 FileUploadServlet.java

将读到的文件存在数据库里。

package servlet;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.sql.Blob;import java.util.*;import javax.servlet.ServletConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.hibernate.Hibernate;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;/** * @author XHW *  * @date 2011-7-26 */public class FileUploadServlet extends HttpServlet {private static final long serialVersionUID = -7744625344830285257L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);try {            FileItem item = (FileItem) upload.parseRequest(request).get(0);File tempFile = new File(item.getName());Picture pic = new Picture();pic.setName(item.getName());SessionFactory sf = null;AnnotationConfiguration cfg = new AnnotationConfiguration().configure();sf = cfg.buildSessionFactory();Session sess = sf.getCurrentSession();sess.beginTransaction();Blob b = (Blob) Hibernate.createBlob(item.getInputStream());pic.setPic(b);sess.save(pic);sess.getTransaction().commit();sf.close();request.setAttribute("upload.message", "图片上传成功!");} catch (FileUploadException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();System.out.println("上传文件失败!");}}}

如果还想对数据库里的图片进行导出操作,推荐读者欣赏另一篇文章点击打开链接

而如果说,你所选的jsp并不只有这一个文件(这通常是绝大多数情况下),还有其他内容,则你要做点改变。

sell.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>My JSP 'sell.jsp' starting page</title>  </head>    <body>    <form method="post"   action="${pageContext.request.contextPath}/servlet/FileUploadServlet"  enctype="multipart/form-data">     货物种类:<input type="text"  name="type"><br/>     数量:<input type="text" name="number"><br/>     货源地:<input type="text"  name="place"><br/>     图片:<input type="file" name="picture"><br/>     货物描述:<input type="text" name="description"><br/>    <input type="submit"  name="提交">      </form>     </body></html>
FileUploadServlet.java

package servlet;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.sql.Blob;import java.util.*;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.hibernate.Hibernate;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;/** * @author XHW *  * @date 2011-7-26 */public class FileUploadServlet extends HttpServlet {private static final long serialVersionUID = -7744625344830285257L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);SessionFactory sf = null;AnnotationConfiguration cfg = new AnnotationConfiguration().configure();sf = cfg.buildSessionFactory();Session sess = sf.getCurrentSession();try {            List<FileItem> items = ( List<FileItem>) upload.parseRequest(request);            for(FileItem item:items){            if(item.isFormField())            {}            else            {            File tempFile = new File(item.getName());            Picture pic = new Picture();            pic.setName(item.getName());            sess.beginTransaction();            Blob b = (Blob) Hibernate.createBlob(item.getInputStream());            pic.setPic(b);            sess.save(pic);            sess.getTransaction().commit();                        System.out.println("图片上传成功!");            }}            sf.close();            } catch (FileUploadException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();System.out.println("上传文件失败!");}}}
这里会对每一个form的输入项进行处理,若是输入项是文件类型的,就存进数据库,若不是文件类型的,则不处理。若是非要处理图片,而不是其它文件,你只需要判断每一个FileItem的名字的后缀就好。








0 0
原创粉丝点击