SpringMVC实现简单的图片上传DEMO

本文介绍了一个简单的图片管理系统的设计与实现过程,包括前后端交互流程、图片上传处理及展示等功能。通过具体示例展示了如何使用Java与JSP技术进行图片管理系统的开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先定义好picture的Entity.

前台页面:(css,js等没给出)

<%-- productList.jsp --%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<meta name="renderer" content="webkit|ie-comp|ie-stand">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<!--[if lt IE 9]>
<script type="text/javascript" src="js/html5.js"></script>
<script type="text/javascript" src="js/respond.min.js"></script>
<script type="text/javascript" src="js/PIE_IE678.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/css/H-ui.css"/>
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/css/H-ui.admin.css"/>
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/font/font-awesome.min.css"/>
<!--[if IE 7]>
<link href="font/font-awesome-ie7.min.css" rel="stylesheet" type="text/css" />
<![endif]-->
<title>图片列表</title>
</head>
<body>
<nav class="Hui-breadcrumb"><i class="icon-home"></i> 首页 <span class="c-gray en">&gt;</span> 图片库 <span class="c-gray en">&gt;</span> 图片列表 <a class="btn btn-success radius r mr-20" style="line-height:1.6em;margin-top:3px" href="javascript:location.replace(location.href);" title="刷新" ><i class="icon-refresh"></i></a></nav>
<div class="pd-20">
  <div class="text-c"> 日期范围:
    <input type="text" onFocus="WdatePicker({maxDate:'#F{$dp.$D(\'logmax\')||\'%y-%M-%d\'}'})" id="logmin" class="input-text Wdate" style="width:120px;">
    -
    <input type="text" onFocus="WdatePicker({minDate:'#F{$dp.$D(\'logmin\')}',maxDate:'%y-%M-%d'})" id="logmax" class="input-text Wdate" style="width:120px;">
    <input type="text" name="" id="" placeholder=" 图片名称" style="width:250px" class="input-text"><button name="" id="" class="btn btn-success" type="submit"><i class="icon-search"></i> 搜图片</button>
  </div>
  <div class="cl pd-5 bg-1 bk-gray mt-20"> <span class="l"><a href="javascript:;" onClick="datadel()" class="btn btn-danger radius"><i class="icon-trash"></i> 批量删除</a> <a class="btn btn-primary radius" href="addPicture.html"><i class="icon-plus"></i> 添加图片</a></span> <span class="r">共有数据:<strong>54</strong> 条</span> </div>
  <table class="table table-border table-bordered table-bg table-hover table-sort">
    <thead>
      <tr class="text-c">
        <th width="40"><input name="" type="checkbox" value=""></th>
        <th width="80">ID</th>
        <th width="100">分类</th>
        <th width="150">封面</th>
        <th>图片名称</th>
        <th width="150">Tags</th>
        <th width="150">更新时间</th>
        <th width="60">发布状态</th>
        <th width="70">操作</th>
      </tr>
    </thead>
    <tbody>
     <c:if test="${not empty pictures}">
     <c:forEach items="${pictures }" var="pic" varStatus="vs">
      <tr class="text-c">
        <td><input name="" type="checkbox" value="${vs.index + 1}"></td>
        <td>${vs.index + 1}</td>
        <td>${pic.classify }</td>
        <td><a href="picture-show.html"><img class="picture-thumb" src="${pageContext.request.contextPath }/${pic.picAddr }"></a></td>
        <td class="text-l"><a class="maincolor" href="picture-show.html">${pic.picName }</a></td>
        <td class="text-c">${pic.tags }</td>
        <td>${pic.updateTime }</td>
        <td class="picture-status"><span class="label label-success">已发布</span></td>
        <td class="f-14 picture-manage"><a style="text-decoration:none" onClick="picture_xiajia(this,'10001')" href="javascript:;" title="下架"><i class="icon-hand-down"></i></a> <a style="text-decoration:none" class="ml-5" onClick="picture_edit('10001','','','图库编辑','picture-edit.html')" href="javascript:;" title="编辑"><i class="icon-edit"></i></a> <a style="text-decoration:none" class="ml-5" onClick="picture_del(this,'10001')" href="javascript:;" title="删除"><i class="icon-trash"></i></a></td>
      </tr>
      </c:forEach>
      </c:if>
      <c:if test="${pictures == null}">
         <tr class="text-c">
        <td><input name="" type="checkbox" value=""></td>
        <td>001</td>
        <td>分类名称</td>
        <td><a href="picture-show.html"><img class="picture-thumb" src="${pageContext.request.contextPath }/images/pictures/$5O{[R$CL95BYYRCCY[}ZWD.gif"></a></td>
        <td class="text-l"><a class="maincolor" href="picture-show.html">现代简约 白色 餐厅</a></td>
        <td class="text-c">标签</td>
        <td>2014-6-11 11:11:42</td>
        <td class="picture-status"><span class="label label-success">已发布</span></td>
        <td class="f-14 picture-manage"><a style="text-decoration:none" onClick="picture_xiajia(this,'10001')" href="javascript:;" title="下架"><i class="icon-hand-down"></i></a> <a style="text-decoration:none" class="ml-5" onClick="picture_edit('10001','','','图库编辑','picture-edit.html')" href="javascript:;" title="编辑"><i class="icon-edit"></i></a> <a style="text-decoration:none" class="ml-5" onClick="picture_del(this,'10001')" href="javascript:;" title="删除"><i class="icon-trash"></i></a></td>
      </tr>
      </c:if>
    </tbody>
  </table>
  <div id="pageNav" class="pageNav"></div>
</div>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/layer/layer.min.js"></script> 
<script type="text/javascript" src="${pageContext.request.contextPath }/js/pagenav.cn.js"></script> 
<script type="text/javascript" src="${pageContext.request.contextPath }/plugin/My97DatePicker/WdatePicker.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/H-ui.js"></script> 
<script type="text/javascript" src="${pageContext.request.contextPath }/js/H-ui.admin.js"></script>
<script type="text/javascript">
window.onload = (function(){
    // optional set
    pageNav.pre="&lt;上一页";
    pageNav.next="下一页&gt;";
    // p,当前页码,pn,总页面
    pageNav.fn = function(p,pn){$("#pageinfo").text("当前页:"+p+" 总页: "+pn);};
    //重写分页状态,跳到第三页,总页33页
    pageNav.go(1,13);
});
$('.table-sort').dataTable({
	"lengthMenu":false,//显示数量选择 
	"bFilter": false,//过滤功能
	"bPaginate": false,//翻页信息
	"bInfo": false,//数量信息
	"aaSorting": [[ 1, "desc" ]],//默认第几个排序
	"bStateSave": true,//状态保存
	"aoColumnDefs": [
	  //{"bVisible": false, "aTargets": [ 3 ]} //控制列的隐藏显示
	  {"orderable":false,"aTargets":[0,8]}// 制定列不参与排序
	]
});
</script>
</body>
</html>
<%-- addPicture.jsp --%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c"  uri="http://java.sun.com/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit|ie-comp|ie-stand">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<!--[if lt IE 9]>
<script type="text/javascript" src="js/html5.js"></script>
<script type="text/javascript" src="js/respond.min.js"></script>
<script type="text/javascript" src="js/PIE_IE678.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/css/H-ui.css"/>
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/css/H-ui.admin.css"/>
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/font/font-awesome.min.css"/>
<!--[if IE 7]>
<link href="font/font-awesome-ie7.min.css" rel="stylesheet" type="text/css" />
<![endif]-->
<title>图片列表_js代码</title>
</head>
<body>
<nav class="Hui-breadcrumb"><i class="icon-home"></i> 首页 <span class="c-gray en">&gt;</span> 图片库 <span class="c-gray en">&gt;</span> 图片列表 <a class="btn btn-success radius r mr-20" style="line-height:1.6em;margin-top:3px" href="javascript:location.replace(location.href);" title="刷新" ><i class="icon-refresh"></i></a></nav>
<div class="pd-20">
  <div class="text-c"> 日期范围:
    <input type="text" onFocus="WdatePicker({maxDate:'#F{$dp.$D(\'logmax\')||\'%y-%M-%d\'}'})" id="logmin" class="input-text Wdate" style="width:120px;">
    -
    <input type="text" onFocus="WdatePicker({minDate:'#F{$dp.$D(\'logmin\')}',maxDate:'%y-%M-%d'})" id="logmax" class="input-text Wdate" style="width:120px;">
    <input type="text" name="" id="" placeholder=" 图片名称" style="width:250px" class="input-text"><button name="" id="" class="btn btn-success" type="submit"><i class="icon-search"></i> 搜图片</button>
  </div>
  <div class="cl pd-5 bg-1 bk-gray mt-20"> <span class="l"><a href="javascript:;" onClick="datadel()" class="btn btn-danger radius"><i class="icon-trash"></i> 批量删除</a> <a class="btn btn-primary radius" onClick="picture_add('','','添加图片','picture-add.html')" href="javascript:;"><i class="icon-plus"></i> 添加图片</a></span> <span class="r">共有数据:<strong>54</strong> 条</span> </div>
  <form action="insertPic.html" method="post" enctype="multipart/form-data">
  <table class="table table-border table-bordered table-bg table-hover table-sort">
    <thead>
      <tr class="text-c">
        <th width="100">分类</th>
        <th width="150">封面</th>
        <th>图片名称</th>
        <th width="150">Tags</th>
        <th width="150">更新时间</th>
        <th width="70">操作</th>
      </tr>
    </thead>
    <tbody>
    
      <tr class="text-c">
        <td><input name="classify" type="text"></td>
        <!-- <td><a href="picture-show.html"><img class="picture-thumb" src="pic/200x150.jpg"></a></td> -->
        <td><input type="file" name="uploadPic" /></td>
        <td class="text-l"><input type="text" name="picName" /></td>
        <td class="text-c"><input type="text" name="tags" /></td>
        <td><input type="text" name="updateTime" /></td>
        <td class="f-14 picture-manage">
        	<input type="submit" value="确定添加"/>
      </tr>
    </tbody>
  </table>
     </form>
  <div id="pageNav" class="pageNav"></div>
</div>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/layer/layer.min.js"></script> 
<script type="text/javascript" src="${pageContext.request.contextPath }/js/pagenav.cn.js"></script> 
<script type="text/javascript" src="${pageContext.request.contextPath }/plugin/My97DatePicker/WdatePicker.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/H-ui.js"></script> 
<script type="text/javascript" src="${pageContext.request.contextPath }/js/H-ui.admin.js"></script>
</body>
</html>

后台代码:

//ManagerController.java
@Controller
@RequestMapping("/manage")
public class ManageController {
	@Resource
	private PictureService pictureService;
	
	@RequestMapping("/pictureList")
	public ModelAndView pictureList() {
		List<Picture> pictures = pictureService.listAll();
		ModelAndView mv = new ModelAndView();
		mv.addObject("pictures", pictures);
		mv.setViewName("manage/pictureList");
		return mv;
	}
	
	@RequestMapping("/addPicture")
	public ModelAndView addPicture() {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("manage/addPicture");
		return mv;
	}
	
	@RequestMapping("/insertPic")
	public ModelAndView insertPic(Picture picture, MultipartFile uploadPic,HttpSession session) throws IllegalStateException, IOException {
		ModelAndView mv = new ModelAndView();
		String picPath = session.getServletContext().getRealPath("/") + "images/pictures/";
		String oldFileName = uploadPic.getOriginalFilename();
		String suffix = oldFileName.substring(oldFileName.lastIndexOf("."));
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		Date date = new Date();
		File newFile = new File(picPath + sdf.format(date) + suffix);
		picture.setPicAddr("images/pictures/" + sdf.format(date) + suffix);
		uploadPic.transferTo(newFile);
		System.out.println("最新插入的图片ID是:" + pictureService.insertPic(picture));
		mv.setViewName("redirect:pictureList.html");
		return mv;
	}
}

实现效果:

首先进行pictureList.jsp,点击添加图片:

164707_Te6m_2861620.png

会进入addPicture.jsp页面,然后选择图片,确定添加

164916_97YX_2861620.png

跳转回到图片显示页面:

165120_j0vA_2861620.png

遇到的一些问题:

添加的时候一开始乱码,修改了一下配置文件就好了,在url后面添加

?useUnicode=true&characterEncoding=utf8.

转载于:https://my.oschina.net/kkdo/blog/745186

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值