`
yuanlanjun
  • 浏览: 1184795 次
文章分类
社区版块
存档分类
最新评论

Struts2上传图片到Mysql数据库中,以及显示到页面

 
阅读更多

数据库的创建:

数据库名叫:csdn

表名:savepicture

DROP TABLE IF EXISTS `savepicture`;
CREATE TABLE `savepicture` (
`id` int(10) NOT NULL auto_increment,
`picture` blob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

好动手创建工程啦:

其实非常简单,一看就明白。把需要的包该导的都导了就行了。

接着我们创建上传页面:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>File Upload</title>
<link href="<%=request.getContextPath()%>/css/fileupload.css"
rel="stylesheet" type="text/css">
</head>
<body bgcolor="#cccccc">
<div style="padding-top: 30px; padding-left: 30px">
<fieldset
style="width: 600px; border-color: #000000; padding-left: 10px">
<legend>
<font size="-1" color="#000000"><b>上传图片</b> </font>
</legend>
<div class="ErrorDiv">
<s:fielderror/>
<s:actionerror/>
</div>
<s:form action="fileUpload.action" method="post" theme="simple"
enctype="multipart/form-data">
<table border="1" width="500px">
<tr>
<td class="tableTDCenter">
图片路径:
</td>
<td class="tableTDCenter">
<s:file name="file" cssClass="fileInput"/>
</td>
</tr>
<tr>
<td class="tableTDCenter" colspan="2">
<s:submit value="提交" cssClass="button"></s:submit>
</td>
</tr>
</table>
</s:form>
</fieldset>
</div>
</body>
</html>

很简单,就是个上传框和按钮,别的没有了。至于一些css就是稍微的装饰装饰,一会也在下面写上!

上传成功的画面:

<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Image List</title> <link href="<%=request.getContextPath()%>/css/fileupload.css" rel="stylesheet" type="text/css"> </head> <body> <s:iterator value="#list" id="picture"> <div class="divfloat"> <img src='outPicture.action?id=<s:property value ="#picture.id"/>'> </div> </s:iterator> </body> </html>

下面我们看看struts2的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources"
value="messageResource" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<package name="default" extends="struts-default">
<!--上传-->
<action name="fileUpload"
class="org.csdn.action.FileUploadAction">
<interceptor-ref name ="defaultStack" />
<interceptor-ref name ="fileUpload">
<param name ="allowedTypes">
image/bmp,image/png,image/gif,image/jpg
</param>
<param name="maximumSize">404800</param>
</interceptor-ref>
<result name="success">/uploadSuccess.jsp</result>
<result name="input">/fileUpload.jsp</result>
</action>
<!--输出显示-->
<action name="outPicture"
class="org.csdn.action.OutPictureAction">
<result name="input">/uploadSuccess.jsp</result>
</action>
</package>
</struts>

至于里面的东西是什么,大家肯定根据名字一看就知道了。

上面我引用了messageResource资源文件,为了显示错误消息。比如上传类型不正确,超过大小,以及上传失败。

下面就是资源文件中的内容。

struts.messages.error.content.type.not.allowed=The file you uploaded is not a image
struts.messages.error.file.too.large=this picutre is too large
fileupload.fail=file upload is fail

如果没有重新定义上面两个key的话,显示的会是struts2默认的错误消息,很是难看,也乱起八糟的。所以我重新定义了。

接着我们就开始写上传和输出图片的action,以及相关的类信息

上传的action:

import java.io.File;
import java.util.List;
import org.csdn.service.FileUploadService;
import org.csdn.vo.Picture;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* @author closewubq
*/
public class FileUploadAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private File file;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
/**
* 上传文件
*/
@Override
public String execute() {
FileUploadService fuservice=new FileUploadService();
if(fuservice.fileUpload(file)){
List<Picture> list=fuservice.findAll();
ActionContext cxt=ActionContext.getContext();
cxt.put("list",list);
return SUCCESS;
}else{
super.addActionError(this.getText("fileupload.fail"));
return INPUT;
}
}
}

非常简单,因为我只单纯的用了struts2,没有用spring。所以FileUploadService就硬编码写在里面了。、

图片上传的主要业务类

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import org.csdn.connection.GetConnection;
import org.csdn.vo.Picture;
/**
* @author closewubq
*/
public class FileUploadService {

/**
* 上传图片到数据库
* @param flie
* @return boolean
* 上传是否成功
*/
public boolean fileUpload(File flie) {
FileInputStream in = null;
Connection conn = null;
PreparedStatement ps = null;
try {
in = new FileInputStream(flie);
String sql = "insert into savepicture(picture) value(?)";
conn = GetConnection.getConn();
if (conn == null) {
System.out.println("连接为null");
return false;
}
ps = conn.prepareStatement(sql);
ps.setBinaryStream(1, in, in.available());
if (ps.executeUpdate() > 0) {
GetConnection.close(conn, ps, null);
return true;
} else {
GetConnection.close(conn, ps, null);
return false;
}
} catch (Exception e) {
System.out.println(e.getMessage());
GetConnection.close(conn, ps, null);
return false;
}
}

/**
* 检索所有图片
* @return list
* 返回所有图片记录
*/
public List<Picture> findAll() {
List<Picture> list = new ArrayList<Picture>();
Picture pic = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
String sql = "select id from savepicture";
conn = GetConnection.getConn();
if (conn == null) {
System.out.println("连接为null");
return null;
}
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
pic = new Picture();
pic.setId(rs.getInt("id"));
list.add(pic);
}
GetConnection.close(conn, ps, rs);
return list;
} catch (Exception e) {
e.printStackTrace();
GetConnection.close(conn, ps, rs);
return null;
}

}

/**
* 根据图片ID获取流对象
* @param id
* @return InputStream
*/
public InputStream getPicById(int id) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
InputStream is = null;
try {
String sql = "select picture from savepicture where id=?";
conn = GetConnection.getConn();
ps = conn.prepareStatement(sql);
ps.setInt(1, id);
rs = ps.executeQuery();
if(rs.next()){
is = rs.getBinaryStream("picture");
GetConnection.close(conn, ps, rs);
return is;
}
GetConnection.close(conn, ps, rs);
return null;
} catch (Exception ex) {
ex.printStackTrace();
GetConnection.close(conn, ps, rs);
return null;
}
}

}

简单的写了个jdbc链接的获取类。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 获取数据库链接
* @author closewubq
*/
public class GetConnection {

/**
* 获取数据库连接
* @return Connection
* 返回数据库连接
*/
public static Connection getConn() {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost/csdn?user=root&password=";
Connection connection = DriverManager.getConnection(url);
return connection;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

/**
* 关闭连接释放资源
* @param conn
* @param rs
* @param st
*/
public static void close(Connection conn,PreparedStatement ps,ResultSet rs){
if(rs!=null)
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(ps!=null)
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}

}

}

还有保存图片信息的VO


public class Picture {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}

输出图片信息的Action

import java.io.InputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.csdn.service.FileUploadService;
import com.opensymphony.xwork2.ActionSupport;
/**
* 图片输出
* @author closewubq
*
*/
public class OutPictureAction extends ActionSupport {
private static final long serialVersionUID = 1L;
@Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
int id=Integer.parseInt(request.getParameter("id"));
FileUploadService service=new FileUploadService();
InputStream in=service.getPicById(id);
HttpServletResponse response=ServletActionContext.getResponse();
response.setContentType("image/gif");
int size=in.available();
byte[] image=new byte[size];
in.read(image);
ServletOutputStream out=response.getOutputStream();
out.write(image);
return null;
}
}

over,over好了我们该启动看看效果了:

分享到:
评论

相关推荐

    使用Struts2上传图片存取到Mysql中并读取出来显示在页面上_好资源0分送

    实际上,写完多文件上传和下载文章的时候,类似的想法就已经有了,一直没有实际把它整理好...2. 从数据库中读取图片并显示在页面中 注:本文使用的是单纯的Struts2 + Spring + Hibernate,图片操作并没有使用Servlet。

    struts2 + jsp + ajax + jquery + hibernate + mysql通讯录

    之前上传了一个jdbc版本的通讯录,这个是hibernate,都是我在学习的时候自己...页面主要有登录,注册,显示联系人列表的主页面,修改,增加,删除,查找联系人等功能,想传我截的图上来的,那样看的更清楚,可是没有传

    struts2讲义_吴峻申

    文档目录 Struts2讲义 作者:吴峻申 目录 第1章 Struts过时了吗? 10 1.1 Struts历史发展过程 10 1.2 Struts2的“简历” 13 ...附录2 Mysql数据库使用和创建Web项目数据库 208 F2.1 安装 209 F2.2 创建数据库 216

    (3.0版本)自己写的struts2+hibernate+spring实例

    jar包:项目中除了使用了struts2,hibernate3.0和spring1.8以外(用spring2.0的包也可以.不能低于1.8的包.)还是用了junit,ajax,第三方的table组件.等等.所以需要下载相对应的包. 为了上传jar.我专门申请了一个网盘.所有...

    jqueryUi+jqGrid+spring+hibernate+struts1.2+mysql 完美例子(带数据库文件)

    本例程,主要是,用jqgrid 实现grid及subgrid数据列表的分页,增,删,改,查,定制显示列的功能 用jqueryUI 实现 上下左的布局 数据库及源码都在上传的RAR包中 由于上传空间的问题,JAR包不做上传,大家可以自己...

    自己写的struts+hibenate+mysql实现的博客系统

    自己hibernate结课后用struts+hibenate写的博客系统,主要的技术:1、ajax实现jsp与action后台的数据交换,实现异步数据操作 2、jQuery的页面效果比较好3、照片批量上传,删除功能还有很多很多的功能在这儿就不一一...

    SSH个人信息管理系统.zip

    包含数据库脚本文件,系统架构: 前端使用Bootstrap,后端采用Struts2+Spring3+Hibernate4集成框架,数据库使用MySQL数据库搭建的...对文件的操作(实现文件从本地上传功能,将文件信息传到数据库中并在页面上显示)

    个人知识管理系统 Struts2 + Spring + Hibernate

    采用了FCKeditor在线文本编辑器,用FCKeditor上传文件时还存在有问题,不知道是不是配置存在问题,但是图片文件利用Struts2的action上传到服务器,因为有其他附件文件要上传,并且要保存文件信息,在删除文章时要把...

    个人信息管理系统Struts2 spring hibernate dwr

    采用了FCKeditor在线文本编辑器,用FCKeditor上传文件时还存在有问题,不知道是不是配置存在问题,但是图片文件利用Struts2的action上传到服务器,因为有其他附件文件要上传,并且要保存文件信息,在删除文章时要把...

    凌夕卡密微商城 v1.0.1

    2、导入数据库,将fenxiao.sql导入到mysql数据库中;3、修改数据库信息,修改文件:WEB-INF\classes\database.propertiesjdbc.user=数据库用户名jdbc.password=数据库密码jdbc.driverClass=...

    Jaoso新闻文章发布系统final( Struts+Spring+Hibernate)

    ·采用MVC模式显示与逻辑分离,方便修改页面显示效果 ·支持多界面风格,只需增加相应的风格包(目前有11种风格) ·支持国际化多语言,只需要增加响应语言包(目前支持简\繁\英) ·支持多种数据库,目前测试过的数据库...

    基于SSH的婚庆网站,适合新手,带数据库,数据库为MYSQL

    自己写的,页面可能有点丑,基本功能增删改查都有,附带上传图片,时间转换字符串,适合新手学习,项目导入MyEclipse后,记得更改hibernate 导入数据库

    JAVA程序开发大全---上半部分

    本书系统全面地介绍了Java中的各项主流技术,以及基于这些技术的商业化应用程序的开发技巧,在讲解过程中以目前最为流行的开发工具MyEclipse为载体,全面系统地介绍了如何在MyEclipse中开发基于Struts、Hibernate、...

    java+mysql实现的代码分享网(所有源码已开源,效果可看网址:www.admintwo.com)

    6、运行步骤:首先将代码导入到eclipse或者其他IDE,然后利用mysql数据库建一个名为admintwo的库,将admintwo.sql执行一遍。修改jdbc.properties和img.properties,其中jdbc.properties是数据库连接信息,img....

    寻仙Jsp+Mysql(WAP2.0)-其他

    (class="a")程序使用的mysql数据库,数据库文件位于WebRoot/Sql-xnx3.sql,安装好数据库后,进入数据库,找到 xnx3_command表,进入修改一下xnx3_siteurl为你的即将访问的域名。将程序源码上传至服务器便可。注意要...

    ssh(structs,spring,hibernate)框架中的上传下载

     以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。  工程...

    JAVA SSH青协志愿服务管理系统源码

    数据库 mysql(关系型数据库) 前台技术 JSP(css,js,ajax,el,java) 项目技术 Struts+srping+Hibernate Struts 控制器(负责接收据+处理数据+响应结果(重定向+转)) Spring 工厂类 Hibernate 持久性访问层 *.hbm....

    JAVA SSH青协志愿服务管理系统源码.rar

    数据库 mysql(关系型数据库) 前台技术 JSP(css,js,ajax,el,java) 项目技术 Struts+srping+Hibernate Struts 控制器(负责接收据+处理数据+响应结果(重定向+转)) Spring 工厂类 Hibernate 持久性访问层 *.hbm....

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    可以在管理页面上添加博文的分类,可以上传图片和游览自己的相册,在上传过程中可以将一张图片定义为自己的签名,在个人管理页面中注册用户还可以修改自己的个人信息。博文管理,友情链接管理及博文分类管理,用例图...

Global site tag (gtag.js) - Google Analytics