初识 Spring(23)---(SpringMVC实战--构建学生管理系统(13))

SpringMVC实战--构建学生管理系统(13)

首页部分学生管理页面(添加头像(图像)功能)制作    在上篇博客基础上继续开发

(源代码见仓库:https://gitee.com/jianghao233/course)

已经完成了保存图片到真实路径,并解决了图片重名问题,但核心问题:将图片保存到数据库中并显示在页面上任未实现

修改代码: 修改 StudentController.java

package com.neuedu.controller;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import com.neuedu.po.TbClass;
import com.neuedu.po.TbStudent;
import com.neuedu.service.ClassService;
import com.neuedu.service.StudentService;
import com.neuedu.utils.UploadUtils;
import com.neuedu.vo.StudentVO;


import oracle.net.aso.s;

@Controller
	@RequestMapping("/student")
	public class StudentController {
		@Autowired
		private ClassService classService;
		@Autowired
		private StudentService studentService;
		@RequestMapping({"/","/list"})
		//查询所有学生信息
		public String list(Model model) {
			List list = studentService.getList();
			List classes = classService.getList();
			
			model.addAttribute("list",list);
			model.addAttribute("classes",classes);
			return "admin/studentManager";
		}
		@RequestMapping("/save")
		public String save(TbStudent tbStudent,HttpServletRequest request,@RequestParam("fileurl") MultipartFile multipartFile) throws Exception {
			String oldname = multipartFile.getOriginalFilename();
		/*为避免重名带来的图片覆盖问题,修改保存图片的名字	*/
			
			/*1.去掉文件名中的路径信息*/
			String realName = UploadUtils.getRealName(oldname);
			
			/*2.获取一个UUID的名字*/
			String uuidName = UploadUtils.getUUIDName(realName);
			System.out.println(uuidName);
			
			
			/*获取真实路径*/
			String basePath = request.getRealPath("/static/upload");
			
			String dir = UploadUtils.getDir();
			
			File filedir = new File(basePath + dir);
			if(!filedir.exists()) {
				filedir.mkdirs();
			}
			
			/*创建 file 对象,以 basePath 作为目录,以 uuidName 作为文件名,但这是虚拟的,只存在于内存中*/
			File file = new File(filedir,uuidName);
			/*将上传来的图片写入到 file 虚拟路径中*/
			multipartFile.transferTo(file);
			
			String picurl = "/static/upload" + dir + "/" + uuidName;   //修改代码
			tbStudent.setPicurl(picurl);
			studentService.save(tbStudent);
			return "redirect:/student/";
		}
		@RequestMapping("/modify")
		public String modify(TbStudent tbStudent) {
			studentService.update(tbStudent);
			return "redirect:/student/";
		}
		@RequestMapping("/delete")
		public String delete(Integer stuid) {
			studentService.delete(stuid);
			return "redirect:/student/";
		}
	}
	

修改:StudentManager.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


	
		
		
		
		
		
		
		
	
	
		
学生列表
//新增代码 //新增代码
学号 头像姓名 密码 班级 操作
当前没有数据
${s.stunum } ${s.picurl }${s.stuname } ${s.password } ${s.classname } 编辑 删除
学号:
姓名:
密码:
头像:
班级:

输出:新建一个 小D,上传图像,图像的真实路径被保存在数据库中并显示出来

初识 Spring(23)---(SpringMVC实战--构建学生管理系统(13))_第1张图片

初识 Spring(23)---(SpringMVC实战--构建学生管理系统(13))_第2张图片

但需要显示的是图片,不是图片的路径,继续修改代码

修改:StudentManager.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


	
		
		
		
		
		
		
		
	
	
		
学生列表
//修改代码
学号 头像 姓名 密码 班级 操作
当前没有数据
${s.stunum } //修改代码 //修改代码 ${s.stuname } ${s.password } ${s.classname } 编辑 删除
学号:
姓名:
密码:
头像:
班级:

输出:成功将路径中的图片显示出来

初识 Spring(23)---(SpringMVC实战--构建学生管理系统(13))_第3张图片

功能已经实现,但代码可以再次精简,封装代码

 修改 UploadUtils.java

package com.neuedu.utils;

import java.io.File;
import java.io.IOException;
import java.util.Random;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.multipart.MultipartFile;


public class UploadUtils {
	/**
	 * 获取文件真实名称
	 * 由于浏览器的不同获取的名称可能为:c12312231abd:/upload/1.jpg或者1.jpg 
	 * 最终获取的为  1.jpg 
	 * @param name 上传上来的文件名称
	 * @return	真实名称
	 */
	public static String getRealName(String name){
		//获取最后一个"/"
		int index = name.lastIndexOf("\\");
		return name.substring(index+1);
	}
	
	
	/**
	 * 获取随机名称
	 * @param realName 真实名称
	 * @return uuid 随机名称
	 */
	public static String getUUIDName(String realName){
		//realname  可能是  1.jpg   也可能是  1
		//获取后缀名
		int index = realName.lastIndexOf(".");
		if(index==-1){
			return UUID.randomUUID().toString().replace("-", "").toUpperCase();
		}else{
			return UUID.randomUUID().toString().replace("-", "").toUpperCase()+realName.substring(index);
		}
	}
	
	
	/**
	 * 获取文件目录,可以获取256个随机目录
	 * @return 随机目录
	 *
	 *
	 */
	public static String getDir(){
		String s="0123456789ABCDEF";
		Random r = new Random();
		return "/"+s.charAt(r.nextInt(16))+"/"+s.charAt(r.nextInt(16));
	}
	
	 
	public static String fileUpload(String basePath,HttpServletRequest  
 request,MultipartFile multipartFile ) {     
		/*生成随机名字 (新增代码)*/     
		String uuidName = getUUIDName(multipartFile.getOriginalFilename());
		/*获取真实地址*/
		String realBasepath = request.getRealPath(basePath);/*将返回的url路径保存在数据库中*/
		/*获取文件所在的文件夹*/
		String dir = getDir();
		/*	获取新的完整路径*/
		File filedir = new File(realBasepath + dir);
		/*判断文件在真实路径中是否存在,不存在就创建一个*/
		if(!filedir.exists()) {
			filedir.mkdirs();
		}
		/*根据路径和文件名创建文件*/
		File file = new File(filedir,uuidName);
		
		try {
			multipartFile.transferTo(file);
		} catch (IllegalStateException | IOException e) {			
			e.printStackTrace();
		}
		/*返回一个url路径* (新增代码)/
		return basePath + dir + "/" + uuidName;
	
	}
	
	
	public static void main(String[] args) {
	
		String realName = getRealName(s);
		System.out.println(realName);
		
		String uuidName = getUUIDName(realName);
		System.out.println(uuidName);
		
		String dir = getDir();
		System.out.println(dir);
	}
}

修改 StudentController.java

package com.neuedu.controller;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import com.neuedu.commons.Commons;
import com.neuedu.po.TbClass;
import com.neuedu.po.TbStudent;
import com.neuedu.service.ClassService;
import com.neuedu.service.StudentService;
import com.neuedu.utils.UploadUtils;
import com.neuedu.vo.StudentVO;


import oracle.net.aso.s;

@Controller
	@RequestMapping("/student")
	public class StudentController {
		@Autowired
		private ClassService classService;
		@Autowired
		private StudentService studentService;
		@RequestMapping({"/","/list"})
		//查询所有学生信息
		public String list(Model model) {
			List list = studentService.getList();
			List classes = classService.getList();
			
			model.addAttribute("list",list);
			model.addAttribute("classes",classes);
			return "admin/studentManager";
		}
		@RequestMapping("/save")    //修改代码
		public String save(TbStudent tbStudent,HttpServletRequest request,@RequestParam("fileurl") MultipartFile multipartFile) throws Exception {
			/*调用 fileUpload 方法,能够上传图片并返回一个 url 地址*/
			String picurl = UploadUtils.fileUpload(Commons.basePath, request, multipartFile);
			/*将url地址设置到user里面去*/
			tbStudent.setPicurl(picurl);
			/*保存user*/
			studentService.save(tbStudent); 
			return "redirect:/student/";      //修改代码
			
	
		}
		@RequestMapping("/modify")
		public String modify(TbStudent tbStudent) {
			studentService.update(tbStudent);
			return "redirect:/student/";
		}
		@RequestMapping("/delete")
		public String delete(Integer stuid) {
			studentService.delete(stuid);
			return "redirect:/student/";
		}
	}
	

修改 Commons.java

package com.neuedu.commons;

public interface Commons {
//定义静态常量
	//每页显示条数
	public static final int RECORD = 5;
	
	String basePath = "/static/upload";    //新增代码
}

输出:与之前完全一样,功能封装在了 fileUpload  中,直接调用即可

初识 Spring(23)---(SpringMVC实战--构建学生管理系统(13))_第4张图片

总结:

文件上传步骤:
    1:添加commons-fileupload.jar,commons-io.jar
    2:在springmvc.xml配置文件中加入文件上传解析器
        
            
                 
        

    3: 修改from表单的enctype属性,修改为 enctype="multipart/form-data"
    4: 在form表单中加入一个input标签type='file' name="picfile"
    5:在controller中加入 @RequestParam("picfile") MultipartFile multipartFile
    6: 通过multipartFile获取上传文件名,
    7:通过multipartFile的transferTo(要保存的文件的全路径所对应的File对象)
    8:将url设置到对象中进行保存
     注意:一个input标签的name属性值不能和controller中对象参数中的属性名相同

 

你可能感兴趣的:(Java,#,Spring,突破Spring框架)