struts2上传图片
来源:互联网 发布:sql语句having 编辑:程序博客网 时间:2024/05/21 10:33
一、首先把数据库和表建立好,然后把框架搭好如:导入struts2的各个包和mysql的驱动包(共8个包)再把连接数据库的类写好。
二、用jsp上传照片到数据库以及显示到页面的步骤:
1.上传页面如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<form action="fileUpload" method="post" enctype="multipart/form-data">
图片路径:
<input type="file" name="file">
<input type="submit" value="上传">
<input type="reset" value="重置">
</form>
</body>
</html>
2.Picture类如下(依赖注入的方式:set&get方法):
package cn.ichain.bean;
public class Picture {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
.好了,可以写Dao层了我比较懒用action层直接拿Dao层的数据了,中间忽略了service层。
3.向数据库里插入图片路径如下:
package cn.ichain.service;
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 cn.ichain.bean.Picture;
import cn.ichain.comm.GetConnection;
public class FileUploadService {
// /**
/** 上传图片到数据库
* @param flie
* @return boolean
* 上传是否成功
*/
public boolean fileUpload(File flie) {
//FileInputStream 可以对文件读取流的操作
FileInputStream in = null;
Connection conn = null;
PreparedStatement ps = null;
try {
//把文件流读取
in = new FileInputStream(flie);
//把图片路径插入到数据库里
String sql = "insert into savepic(picture) value(?)";
conn = GetConnection.getConn();
ps = conn.prepareStatement(sql);
// 将指定in设置为指定的输入流 inputStream.available()用来判断流的长度
ps.setBinaryStream(1, in, in.available());
//如果有数据库就返回true
if (ps.executeUpdate() > 0) {
return true;
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
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 {
//查询全部id
String sql = "select id from savepic";
conn = GetConnection.getConn();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
pic = new Picture();
pic.setId(rs.getInt("id"));
list.add(pic);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* 根据图片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 savepic 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);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return is;
}
}
4.写FileUploadAction类上传图片:
package cn.ichain.action;
import java.io.File;
import java.util.List;
import cn.ichain.bean.Picture;
import cn.ichain.service.FileUploadService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction extends ActionSupport{
//serialVersionUID 用来表明类的不同版本间的兼容性
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() {
//service层
FileUploadService fuservice=new FileUploadService();
System.out.println("文件:"+file);
//如果图片上传成功
if(fuservice.fileUpload(file)){
//查询所有图片
List<Picture> list=fuservice.findAll();
ActionContext cxt=ActionContext.getContext();
//就查询全部图片把查询出来的图片保存到一个ActionContext里面,以便在显示页面显示图片
cxt.put("list",list);
return SUCCESS;
}else{
//如果图片上传失败就提示上传失败
super.addActionError(this.getText("fileupload.fail"));
return INPUT;
}
}
}
5.写OutPictureAction类作为图片输出:
package cn.ichain.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 cn.ichain.service.FileUploadService;
import com.opensymphony.xwork2.ActionSupport;
public class OutPictureAction extends ActionSupport{
/**
* 图片输出
* @author closewubq
*
*/
private static final long serialVersionUID = 1L;
@Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
//取到显示页面传过来的id
int id=Integer.parseInt(request.getParameter("id"));
//service层
FileUploadService service=new FileUploadService();
//根据id获取流对象
InputStream in=service.getPicById(id);
HttpServletResponse response=ServletActionContext.getResponse();
//不使用编码处理文件流的情况
response.setContentType("image/gif");
//如果服务器发来的字节流没有任何标记,只是在发完一次数据后刷新,则在客户可以用inputStream.available()来判断流的长度。(注:一定要在调用read()至少一次之后,否则为零值)
//inputStream.available()用来判断流的长度
int size=in.available();
//把流的长度放到一个byte数组里面
byte[] image=new byte[size];
//读出数据库里面的图片
in.read(image);
//servletOutputStream用来传输数据
ServletOutputStream out=response.getOutputStream();
//再把图片写入到显示页面
out.write(image);
return null;
}
}
6.成功页面是用于显示已上传的图片的页面如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- 显示图片页面 -->
<html>
<head>
<base href="<%=basePath%>">
</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>
7.配置struts.xml如下:
<?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>
<package name="default" extends="struts-default" namespace="/">
<!--上传-->
<action name="fileUpload"
class="cn.ichain.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">/index.jsp</result>
</action>
<!--输出显示-->
<action name="outPicture"
class="cn.ichain.action.OutPictureAction">
<result name="input">/uploadSuccess.jsp</result>
</action>
</package>
</struts>
注:mysql数据库存放图片路径的类型应该是longbolb类型,因为路径太长了。
- struts2 上传 图片
- struts2上传图片
- struts2上传图片
- Struts2上传图片
- struts2图片批量上传
- struts2上传图片
- struts2批量上传图片
- struts2 不能上传图片
- struts2 上传图片
- Struts2上传图片
- struts2上传图片
- struts2上传图片
- struts2 上传图片
- struts2 spring4 图片上传
- struts2图片上传
- struts2 ajax图片上传
- struts2 图片上传 详解
- Struts2上传图片实例
- Intel的Medfield手机平台功耗
- 数据库端拼音码函数
- TRUNC的用法
- Facebook研究报告全文:重视社交网络“弱关系”
- Android NotificationManager 和Notification的使用总结
- struts2上传图片
- IOS APP设计流程
- 释疑の字段符号 FIELD-SYMBOLS
- 网上商城的三种模式
- 重温高中物理(10071)
- StrutsPrepareAndExecuteFilter工作原理
- 50多个java学习网站
- spring的两种动态代理
- 7440 & GT540