刚学完Struts2的图片上传-显示,一点个人总结。
最后附上(上传,显示,修改,删除)的代码下载.
效果图:
思路:
1. 确定保存图片的位置;
2.获取文件名,并修改文件名(因为存在文件名重复而出现的报错或文件覆盖的可能,所以在将文件名保存到数据库前,先修改)
3. 上传文件到服务器(指定位置)
4. 将文件名存入数据库;
实现:
1. 建一个简单的表
2. 创建实体类
public class EmpEntity implements Serializable{
//前三个对应数据库表中的字段
private int eid;
private String ename;
private String eimg; // 文件上传后的路径或新名
// 得到文件上传对象
private File img;
// 得到上传文件的原名(命名:名+FileName)
private String imgFileName;
/*
*Get和Set方法省略
*/
}
3. 上传图片的jsp页面(使用的是s标签)
4.action类
public class EmpAction3 {
private EmpService service = new EmpImpl();
private List<EmpEntity> empList;
private EmpEntity emp;
private int id;
// 保存的要上传到的路径(upload是web项目与WEB-INF同级的一个文件夹)
private String imgPath = ServletActionContext.getRequest().getSession().getServletContext().getRealPath("upload");
// 添加
public String add() {
// 改原文件名
String newFileName = UpdateFileName.updateOldFileName(emp.getImgFileName());
// 上传
File file = new File(imgPath, newFileName);
try {
FileUtils.copyFile(emp.getImg(), file);
} catch (IOException e) {
e.printStackTrace();
}
// 封装新文件名
emp.setEimg(newFileName);
// 存库,调用添加方法
this.service.add(emp);
return this.all();
}
}
package com.ljm.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class UpdateFileName {
public static String updateOldFileName(String imgFileName) {
//获取文件后缀名
String lastOldFileName = imgFileName.substring(imgFileName.lastIndexOf("."));
//获取并格式化系统时间
String time = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
//生成一个随机数
int num = new Random().nextInt(99999);
//返回新文件名
return time+num+lastOldFileName;
}
}
5. 存入数据库(使用的是JDBC)
package com.ljm.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.ljm.entity.EmpEntity;
import com.ljm.util.DBConnection;
public class EmpDAO {
private Connection conn = null;
private PreparedStatement pre = null;
private ResultSet rs = null;
private DBConnection dbc;
public EmpDAO() {
dbc = new DBConnection();
}
// 添加
public void add(EmpEntity emp) {
try {
conn = dbc.getConn();
String sql = "insert into empImg values(null,?,?)";
pre = conn.prepareStatement(sql);
pre.setString(1, emp.getEname());
pre.setString(2, emp.getEimg());
pre.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
dbc.colseConn(rs, pre, conn);
}
}
}
6.显示,直接上代码(从数据库到页面)
package com.ljm.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.ljm.entity.EmpEntity;
import com.ljm.util.DBConnection;
public class EmpDAO {
private Connection conn = null;
private PreparedStatement pre = null;
private ResultSet rs = null;
private DBConnection dbc;
public EmpDAO() {
dbc = new DBConnection();
}
// 查询所有
public List<EmpEntity> getAll() {
List<EmpEntity> list = new ArrayList<EmpEntity>();
EmpEntity entity = null;
try {
conn = dbc.getConn();
String sql = "select * from empImg";
pre = conn.prepareStatement(sql);
rs = pre.executeQuery();
while (rs.next()) {
entity = new EmpEntity();
entity.setEid(rs.getInt("eid"));
entity.setEname(rs.getString("ename"));
entity.setEimg(rs.getString("eimg"));
list.add(entity);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
dbc.colseConn(rs, pre, conn);
}
return list;
}
}
package com.ljm.action;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.ljm.entity.EmpEntity;
import com.ljm.impl.EmpImpl;
import com.ljm.service.EmpService;
import com.ljm.util.UpdateFileName;
public class EmpAction3 {
private EmpService service = new EmpImpl();
private List<EmpEntity> empList;
private EmpEntity emp;
private int id;
// 保存的要上传到的路径
private String imgPath = ServletActionContext.getRequest().getSession().getServletContext().getRealPath("upload");
// 全查詢
public String all() {
this.empList = this.service.getAll();
return "all";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<link href="${pageContext.request.contextPath}/css/css1.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<table align="center">
<tr>
<td>编号</td>
<td>姓名</td>
<td>头像</td>
<td>编辑</td>
<td>删除</td>
</tr>
<s:iterator id="em" value="empList">
<tr>
<td>${em.eid}</td>
<td>${em.ename}</td>
<td><img alt="头像" style="width: 80px; height: 80px;"
src="${pageContext.request.contextPath}/upload/${em.eimg}"></td>
<td><a href="${pageContext.request.contextPath}/emp_one.action?id=${em.eid}">编辑</a></td>
<td><a href="${pageContext.request.contextPath}/emp_del.action?id=${em.eid}">删除</a></td>
</tr>
</s:iterator>
<tr>
<td colspan="5">
<a href="${pageContext.request.contextPath}/emp/add.jsp">新增</a>
</td>
</tr>
</table>
</body>
</html>
7.最后是struts.xml
源码下载:链接: https://pan.baidu.com/s/1G53DZi0nBiBA1snbQhHlRw 密码: wsig