数据库的创建:

数据库名叫: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数据库中,以及显示到页面...相关推荐

  1. 1046错误mysql_数据库实例:如何解决mysql 1046错误

    数据库实例:如何解决mysql 1046错误 mysql 1046错误解决: require_once './include/common.inc.php'; $maxpostnum = 200; / ...

  2. Linux下MySQL数据库的备份与还原,mysql快速导入导出数据库实例演示,解决mysql大数据量数据库导出慢的问题

    MySQL 数据库的备份与还原 第一章:数据库的导入与导出 ① 数据库的导出 ② 大数据量下 mysqldump 的导出优化 ③ 数据库的导出 第一章:数据库的导入与导出 ① 数据库的导出 需要用到 ...

  3. 卸载linux下的mysql数据库实例_Linux下卸载MySQL数据库实例教程

    本文主要介绍了Linux下卸载MySQL数据库的方法,不知道Linux下卸载MySQL数据库的小伙伴们可以学习一下,本文具有一定的参考价值,希望能帮助到大家. 如何在Linux下卸载MySQL数据库呢 ...

  4. mac 启动mysql多实例_实践:mysql单机多实例部署(mac)

    背景:在自己电脑搭建或测试分布式服务框架时,经常会用多个数据库实例模拟多个环境的情况,因此我把搭建多实例mysql的过程记录下来,方便互相学习和沟通. 1.搭建环境 1) mac 电脑,版本 10.1 ...

  5. mysql有实例名这个概念,MySQL的一些概念笔记

    1.MySQL Server.MySQL实例.MySQL数据库 MySQL数据库指的是实际存在的物理操作系统文件的集合,也可以指逻辑数据的集合.为了访问.处理数据,我们需要一个数据库管理系统,也就是M ...

  6. mysql多实例主从_window 下 mysql 单机多实例以及主从同步

    主MySQL my.ini 配置 # mysql server 的唯一id server_id = 3306 log-bin=log # 需要同步的数据库 binlog-do-db=faner # 不 ...

  7. linux数据库实例开机启动,linux下数据库实例开机自启动设置

    linux下数据库实例开机自启动设置 1.修改/oratab [root@org54 ~]# vi/etc/oratab --把N改为Y,如下提示 # This file is used by ORA ...

  8. MySQL数据库实例教程实训4_数据库管理系统MySQL实验4教程.doc

    数据库管理系统MySQL实验4教程 课 程 实 验 报 告实验项目名称实验四 SQL 语言(部分选做) 实验目的及要求实验环境PC.Windows2000以上操作系统和MySQL 实验步骤(注:请按要 ...

  9. php mysql交互实例_php基于session实现数据库交互的类实例

    /** * session 数据库存储类 */ class Session { private static $session_id = 0; private static $session_data ...

最新文章

  1. log4j(四)——如何控制不同风格的日志信息的输出?
  2. JSP 调用java 常量 枚举
  3. C++ Primer 5th笔记(chap 16 模板和泛型编程)函数指针和实参推断
  4. QML基础类型之size
  5. No buffer space available
  6. 推荐系统(5)-深度推荐模型-AutoRec、DeepCrossing、NeuralCF、PNN、WideDeep、FNN、DeepFM、NFM
  7. math.trunc_带有Python示例的math.trunc()方法
  8. 网站服务器商标属于哪类,网络水晶头属于商标哪个类别
  9. eclipse ssh mysql_Eclipse 配置SSH 详解
  10. python api加快交易速度_使用Python3的pipedriveapi将交易输出限制为1000个交易
  11. 54 计算机与信息科学类,计算机与信息科学类专业包括哪些
  12. 以太局域网(以太网)
  13. 计算机网络——计算机网络病毒和黑客
  14. 黑马程序员_面向对象简介
  15. oracle根据身份证号码 计算年龄、性别
  16. finecms存在任意文件上传漏洞复现
  17. Linux学习笔记(一):Linux常用命令
  18. Codeforces - DZY Loves Sequences
  19. 猫眼电影爬取(woff 字体文件解析)
  20. Godaddy子域名转向外部IP地址设置

热门文章

  1. 让系统在内存中高速运行
  2. 38个Pandas实用技巧
  3. Excel中的图表制作(一) -各种商品销售量显示
  4. 关于Oracle数据库的SQL语句使用时的一些技巧。
  5. 【问题待解决】自定义控件设计界面报错,编译运行正常
  6. 解决java.lang.OutOfMemoryError: unable to create new native thread问题
  7. 在IIS上部署.net core的webapi项目 以及502.5错误的两种解决方法
  8. CondaHTTPError问题的解决
  9. Jupyter-notebook安装问题及解决
  10. 让读者快速了解RocketMQ消息中间件需要解决哪些问题