您的位置:首页 > 数据库

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

2016-10-21 23:03 471 查看
首先要在数据库建张表



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的名字的后缀就好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息