使用Struts2上传图片存取到Mysql中并读取出来显示在页面上_好资源0分送
实际上,写完多文件上传和下载文章的时候,类似的想法就已经有了,一直没有实际把它整理好,今天也终于把这方面的一些经验分享给大家了。 本文涉及到的需求(功能点)大致有: 1. 如何上传图片,并把图片存入数据库(Mysql)中; 2. 从数据库中读取图片并显示在页面中 注:本文使用的是单纯的Struts2 + Spring + Hibernate,图片操作并没有使用Servlet。 ### 使用Struts2上传图片至MySQL数据库并读取显示 #### 概述 本文将详细介绍如何利用Struts2框架结合Spring和Hibernate技术栈实现图片的上传、存储至MySQL数据库以及从数据库读取并在Web页面展示的功能。整个过程不涉及Servlet的操作。 #### 需求分析与实现目标 1. **图片上传与存储**:了解如何通过Struts2上传图片,并将其以Blob形式存储在MySQL数据库中。 2. **图片读取与展示**:掌握如何从数据库中读取图片Blob数据,并将其显示在Web页面上。 #### 开发准备 1. **开发环境配置**:确保具备以下软件环境: - Struts2版本:2.1.8.1 - Hibernate版本:3.x - Spring版本:3.x - MySQL版本:5.x - Tomcat版本:7.0.2 - IDE:MyEclipse 8.6 2. **相关知识储备**:熟悉Struts2的文件上传与表单验证机制、使用Annotation整合SSH(Spring、Struts2、Hibernate)的技术、以及自定义Struts2表单验证后错误信息的显示格式等。 #### 数据库设计与创建 为了实现图片的存储与读取,首先需要设计并创建相应的数据库表结构。本示例使用User对象表示用户信息,包含username、password、picture等字段。MySQL数据库表的创建脚本如下: ```sql SET FOREIGN_KEY_CHECKS = 0; 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; ``` #### 主要代码实现 **1. User类** 实体类`User`用于表示用户信息,其中`picture`字段使用Blob类型存储图片数据。示例如下: ```java import javax.persistence.Entity; import javax.persistence.Table; import javax.persistence.Column; import javax.persistence.Id; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import java.io.Serializable; import java.sql.Blob; @Entity @Table(name = "user", catalog = "test") public class User implements Serializable { private static final long serialVersionUID = 4230186551226007292L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(nullable = false, length = 100) private String username; @Column(nullable = false, length = 100) private String password; @Column private Blob picture; // 构造方法、getters 和 setters 省略 } ``` **2. AddUserAction类** `AddUserAction`类负责处理用户上传的图片数据,并将其保存到数据库中。该类使用Spring框架进行依赖注入,并通过Hibernate完成数据持久化。示例如下: ```java import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.interceptor.FileUploadInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @Controller public class AddUserAction extends ActionSupport { @Autowired private UserService userService; private File file; private String filename; private String contentType; public String execute() throws Exception { User user = new User(); user.setUsername("exampleUsername"); user.setPassword("examplePassword"); if (file != null) { user.setPicture(FileUtils.readFileToBlob(file)); userService.saveUser(user); } return SUCCESS; } // getters 和 setters public File getFile() { return file; } public void setFile(File file) { this.file = file; } public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } public String getContentType() { return contentType; } public void setContentType(String contentType) { this.contentType = contentType; } } ``` **3. UserService接口及其实现** `UserService`接口及其实现类用于提供用户相关的业务逻辑处理,如保存用户信息等。示例如下: ```java public interface UserService { void saveUser(User user); } @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override public void saveUser(User user) { userRepository.save(user); } } ``` **4. UserRepository接口及其实现** `UserRepository`接口及其实现类用于与数据库交互,执行CRUD操作。示例如下: ```java public interface UserRepository { void save(User user); } @Repository public class UserRepositoryImpl implements UserRepository { @Autowired private SessionFactory sessionFactory; @Override public void save(User user) { Session session = sessionFactory.getCurrentSession(); session.saveOrUpdate(user); } } ``` #### 图片读取与展示 为了从数据库中读取图片并显示在Web页面上,需要编写相应的查询逻辑和服务端代码。此外,还需要考虑如何在前端展示这些图片。这里提供一个简单的服务端实现示例: ```java import com.opensymphony.xwork2.ActionSupport; @Controller public class GetUserPictureAction extends ActionSupport { @Autowired private UserService userService; private User user; public String execute() throws Exception { user = userService.getUserById(1); // 假设获取ID为1的用户 return SUCCESS; } public User getUser() { return user; } } ``` 在JSP页面中,可以通过如下方式显示图片: ```html <c:if test="${not empty user.picture}"> <img src="data:image/png;base64,${fn:escapeXml(T(org.apache.commons.codec.binary.Base64).encodeBase64String(T(org.apache.commons.dbcp.BasicDataSource).getBlobAsBytes(user.picture)))}" /> </c:if> ``` 以上就是使用Struts2上传图片至MySQL数据库并读取显示的全过程。此方案适用于需要在Web应用中处理用户上传图片的应用场景。
- 粉丝: 18
- 资源: 36
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
- 3
- 4
- 5
- 6
前往页