struts2上传图片到mysql数据库 实例_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;
好动手创建工程啦:
其实非常简单,一看就明白。把需要的包该导的都导了就行了。
接着我们创建上传页面:
File Upload
rel="stylesheet" type="text/css">
style="width: 600px; border-color: #000000; padding-left: 10px">
上传图片
enctype="multipart/form-data">
图片路径: |
|
很简单,就是个上传框和按钮,别的没有了。至于一些css就是稍微的装饰装饰,一会也在下面写上!
上传成功的画面:
Image List
下面我们看看struts2的配置文件:
/p>
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
value="messageResource" />
class="org.csdn.action.FileUploadAction">
image/bmp,image/png,image/gif,image/jpg
404800
/uploadSuccess.jsp
/fileUpload.jsp
class="org.csdn.action.OutPictureAction">
/uploadSuccess.jsp
至于里面的东西是什么,大家肯定根据名字一看就知道了。
上面我引用了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 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 findAll() {
List list = new ArrayList();
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数据库 实例_Struts2上传图片到Mysql数据库中,以及显示到页面...相关推荐
- 1046错误mysql_数据库实例:如何解决mysql 1046错误
数据库实例:如何解决mysql 1046错误 mysql 1046错误解决: require_once './include/common.inc.php'; $maxpostnum = 200; / ...
- Linux下MySQL数据库的备份与还原,mysql快速导入导出数据库实例演示,解决mysql大数据量数据库导出慢的问题
MySQL 数据库的备份与还原 第一章:数据库的导入与导出 ① 数据库的导出 ② 大数据量下 mysqldump 的导出优化 ③ 数据库的导出 第一章:数据库的导入与导出 ① 数据库的导出 需要用到 ...
- 卸载linux下的mysql数据库实例_Linux下卸载MySQL数据库实例教程
本文主要介绍了Linux下卸载MySQL数据库的方法,不知道Linux下卸载MySQL数据库的小伙伴们可以学习一下,本文具有一定的参考价值,希望能帮助到大家. 如何在Linux下卸载MySQL数据库呢 ...
- mac 启动mysql多实例_实践:mysql单机多实例部署(mac)
背景:在自己电脑搭建或测试分布式服务框架时,经常会用多个数据库实例模拟多个环境的情况,因此我把搭建多实例mysql的过程记录下来,方便互相学习和沟通. 1.搭建环境 1) mac 电脑,版本 10.1 ...
- mysql有实例名这个概念,MySQL的一些概念笔记
1.MySQL Server.MySQL实例.MySQL数据库 MySQL数据库指的是实际存在的物理操作系统文件的集合,也可以指逻辑数据的集合.为了访问.处理数据,我们需要一个数据库管理系统,也就是M ...
- mysql多实例主从_window 下 mysql 单机多实例以及主从同步
主MySQL my.ini 配置 # mysql server 的唯一id server_id = 3306 log-bin=log # 需要同步的数据库 binlog-do-db=faner # 不 ...
- linux数据库实例开机启动,linux下数据库实例开机自启动设置
linux下数据库实例开机自启动设置 1.修改/oratab [root@org54 ~]# vi/etc/oratab --把N改为Y,如下提示 # This file is used by ORA ...
- MySQL数据库实例教程实训4_数据库管理系统MySQL实验4教程.doc
数据库管理系统MySQL实验4教程 课 程 实 验 报 告实验项目名称实验四 SQL 语言(部分选做) 实验目的及要求实验环境PC.Windows2000以上操作系统和MySQL 实验步骤(注:请按要 ...
- php mysql交互实例_php基于session实现数据库交互的类实例
/** * session 数据库存储类 */ class Session { private static $session_id = 0; private static $session_data ...
最新文章
- log4j(四)——如何控制不同风格的日志信息的输出?
- JSP 调用java 常量 枚举
- C++ Primer 5th笔记(chap 16 模板和泛型编程)函数指针和实参推断
- QML基础类型之size
- No buffer space available
- 推荐系统(5)-深度推荐模型-AutoRec、DeepCrossing、NeuralCF、PNN、WideDeep、FNN、DeepFM、NFM
- math.trunc_带有Python示例的math.trunc()方法
- 网站服务器商标属于哪类,网络水晶头属于商标哪个类别
- eclipse ssh mysql_Eclipse 配置SSH 详解
- python api加快交易速度_使用Python3的pipedriveapi将交易输出限制为1000个交易
- 54 计算机与信息科学类,计算机与信息科学类专业包括哪些
- 以太局域网(以太网)
- 计算机网络——计算机网络病毒和黑客
- 黑马程序员_面向对象简介
- oracle根据身份证号码 计算年龄、性别
- finecms存在任意文件上传漏洞复现
- Linux学习笔记(一):Linux常用命令
- Codeforces - DZY Loves Sequences
- 猫眼电影爬取(woff 字体文件解析)
- Godaddy子域名转向外部IP地址设置
热门文章
- 让系统在内存中高速运行
- 38个Pandas实用技巧
- Excel中的图表制作(一) -各种商品销售量显示
- 关于Oracle数据库的SQL语句使用时的一些技巧。
- 【问题待解决】自定义控件设计界面报错,编译运行正常
- 解决java.lang.OutOfMemoryError: unable to create new native thread问题
- 在IIS上部署.net core的webapi项目 以及502.5错误的两种解决方法
- CondaHTTPError问题的解决
- Jupyter-notebook安装问题及解决
- 让读者快速了解RocketMQ消息中间件需要解决哪些问题