struts+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;

好动手创建工程啦:

0_1279977982Vn0v.gif

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

接着我们创建上传页面:

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好了我们该启动看看效果了:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值