nawawa001 发表于 2016-10-22 09:49:09

使用Struts2上传图片存取到Mysql中并读取出来显示在页面上

 
使用Struts2上传图片存取到Mysql中并读取出来显示在页面上
李顺利
Google 标签: 李顺利;Struts;图片;存取;存入;显示;Mysql;数据库;Blob
索引
索引... 1
关键词... 1
序... 2
准备工作... 2
开发环境... 3
流程和主要代码... 3
创建数据库... 3
整合SSH.. 4
主要代码(知识)... 5
程序截图... 12
分享和下载... 14
 
关键词
李顺利,Struts,图片,存取,存入,显示,Mysql,数据库,Blob,

         实际上,写完多文件上传和下载文章的时候,类似的想法就已经有了,一直没有实际把它整理好,今天也终于把这方面的一些经验分享给大家了。
         本文涉及到的需求(功能点)大致有:
1.       如何上传图片,并把图片存入数据库(Mysql)中;
2.       从数据库中读取图片并显示在页面中
注:本文使用的是单纯的Struts2 + Spring + Hibernate,图片操作并没有使用Servlet。
 
准备工作
         本文全部使用Annotation来整合SSH,运用了文件上传和表单验证等知识,这些知识都可以在我以前写的博文中获取到,包括
1.       Struts2下多文件的上传与下载
http://www.blogjava.net/lishunli/archive/2010/01/07/308614.html
 
2.       使用Annotation并对DAO层封装具有分页功能的S2SH整合实例
http://www.blogjava.net/lishunli/archive/2010/03/10/315055.html
http://www.blogjava.net/lishunli/archive/2010/03/12/315231.html
 
3.       如何自定义Struts2表单验证后的错误信息显示格式/样式
http://www.blogjava.net/lishunli/archive/2010/10/17/335384.html
http://www.blogjava.net/lishunli/archive/2010/01/07/308609.html
 
         如果大家对上面的知识有所欠缺的话和想学习的话,也请大家Google或者看我的blog。谢谢。
 
开发环境
Struts 2.1.8.1 + Hibernate3 + Spring3+ Mysql5 + Tomcat 7.0.2+ Myeclipse 8.6
 
流程和主要代码
创建数据库
本文会使用User对象(包括username、password、picture等属性),对应Mysql数据库的创建脚本如下:
/*
Source Server         : Local
Source Server Version : 50140
Source Host           : localhost:3306
Source Database       : test
 
Target Server Type    : MYSQL
Target Server Version : 50140
File Encoding         : 65001
 
Date: 2010-11-13 23:23:37
*/
 
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(100) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL,
  `picture` longblob,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8;
(请注意pictrue的类型)
 
整合SSH
这个步骤请参考使用Annotation并对DAO层封装具有分页功能的S2SH整合实例。
 
主要代码(知识)
1、  User 类
实际上很简单,写出来,主要是让大家知道这里面图片是使用的是什么类型
@Entity
@Table(name = "user", catalog = "test")
public class User implements java.io.Serializable {
     private static final long serialVersionUID = 4230186551226007292L;
 
     private Integer id;
     private String username;
     private String password;
     private Blob picture;
    
     /**
      * 省略构造方法和set、get方法
      */
 
}
 
2、  AddUserAction类
在add user action,就是真正的把User对象(包括图像)save到Mysql中。其中这里使用了Struts2的Annotation,请注意 InterceptorRefs 中 params 的写法。
关键的代码也就是使用hibernate的createBlob方法来把File类型转换成Blob类型。
Blob blob = Hibernate.createBlob(..)
 
@Controller
@Scope("prototype")
@Results( { @Result(name = "success", location = "/index.jsp"), @Result(name = "input", location = "addUser.jsp") })
@InterceptorRefs(value = {
         @InterceptorRef(value = "fileUpload", params = { "maximumSize", "1048576", "allowedTypes","image/bmp,image/x-png,image/png,image/gif,image/jpeg,image/jpg,image/pjpeg" }), @InterceptorRef(value = "defaultStack") })
public class AddUserAction extends ActionSupport {
     private static final long serialVersionUID = -4829467290275994251L;
 
     private User user;
     private File image;
 
     @Resource(name = "org.usc.services.userService")
     private IUserService userService;
    
     /**
      * 省略 set、get方法和validate验证
      */
 
     @Override
     public String execute() throws Exception {
         if (image != null) {
              FileInputStream fin = new FileInputStream(image);// File 转 InputStream
              Blob blob = Hibernate.createBlob(fin);// InputStream 转 Blob
              user.setPicture(blob);
         }
 
         userService.save(user);
 
         return SUCCESS;
     }
}
 
3、  addUser.jsp
这个就是一个普通的Input界面,很简单。想说一下,这里使用了表单验证后信息显示的技术,详情请见如何自定义Struts2表单验证后的错误信息显示格式/样式,也请注意这里使用了文件上传控件,所以要设置enctype="multipart/form-data"。
 
<s:form action="add-user" method="post" theme="simple" enctype="multipart/form-data">
     UserName<s:textfield name="user.username"></s:textfield>
     <font color="red"> *<s:property value="fieldErrors['user.username']" /> </font>
     <br>
    
     PassWord<s:password name="user.password"></s:password>
     <font color="red"> *<s:property value="fieldErrors['user.password']" /> </font>
     <br>    
    

     Image<s:file<font st
页: [1]
查看完整版本: 使用Struts2上传图片存取到Mysql中并读取出来显示在页面上