使用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对象(包括usernamepasswordpicture等属性),对应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;

    

     /**

      * 省略构造方法和setget方法

      */

 

}

 

2、  AddUserAction

add user action,就是真正的把User对象(包括图像)saveMysql中。其中这里使用了Struts2Annotation,请注意 InterceptorRefs params 的写法。

关键的代码也就是使用hibernatecreateBlob方法来把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;

    

     /**

      * 省略 setget方法和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'][0]" /> </font>

     <br>

    

     PassWord<s:password name="user.password"></s:password>

     <font color="red"> *<s:property value="fieldErrors['user.password'][0]" /> </font>

     <br>    

    

     Image<s:file

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值