设为首页 收藏本站
查看: 438|回复: 0

[经验分享] 使用Struts2上传图片存取到Mysql中并读取出来显示在页面上

[复制链接]

尚未签到

发表于 2016-10-22 09:49:09 | 显示全部楼层 |阅读模式
 
使用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"
 
[table][tr][td=1,1,935]<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<font st

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-289720-1-1.html 上篇帖子: MySQL维护命令集锦--查看表的状态(show table status) 下篇帖子: MySQL中的隔离级别和悲观锁及乐观锁示例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表