文件上传三大要素
1.表单提交方法用post
2.有一个可以选择文件的文本框
3.表单属性enctype="multipart/form-data"必须要有
1 以下这种方式,可以将上传的文件上传到本地文件夹
上传页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/upload" enctype="multipart/form-data" method="POST">
<input type="file" name="file">
<input type="submit" value="提交">
</form>
</body>
</html>
pom引入jar(感觉作用不大,可有可无)
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload 文件上传需要的包-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
创建文件上传controller以及方法
package com.wyh.controller;
import com.wyh.unit.UUIDUtil;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
/**
* @Author 魏一鹤
* @Description 文件上传 可以上传到本地电脑,项目,保存到数据库
* @Date 14:47 2021/7/13
* @Param
* @return
**/
@Controller
public class UploadController {
@RequestMapping("/upload")
public String fileUpload(MultipartFile file, Model model, HttpServletRequest request) {
if (file.isEmpty()) {
System.out.println("文件为空");
}
String fileName = file.getOriginalFilename(); // 文件名
String suffixName = fileName.substring(fileName.lastIndexOf(".")); // 后缀名
String filePath = "D:\\Tools\\upload\\"; // 上传后的路径
fileName = UUIDUtil.generateUUID() + suffixName; // 新文件名
File dest = new File(filePath + fileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try {
file.transferTo(dest);
} catch (IOException e) {
e.printStackTrace();
}
model.addAttribute("image",dest);
return "success";
}
}
查看效果
2 以下方式可以把上传的文件上传到项目文件夹,把路径保存到数据库,并在页面进行显示
数据库表t_user
application.properties
#配置视图的前缀
spring.mvc.view.prefix=/WEB-INF/
#配置试图的后缀
spring.mvc.view.suffix=.jsp
#数据源的类型
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#连接数据库的驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#url
spring.datasource.url=jdbc:mysql://localhost:3306/db_test?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull&useSSL=false
#用户名
spring.datasource.username=root
#密码
spring.datasource.password=root
#扫描mapper文件所在的位置:
mybatis.mapper-locations=classpath:mapper/*.xml
# 下面为连接池的补充设置,应用到上面所有数据源中
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall
#开启慢sql的查询
spring.datasource.logSlowSql=true
#控制台显示sql语句
logging.level.com.aaa.dao=debug
# 上传文件总的最大值
spring.servlet.multipart.max-request-size=10MB
# 单个文件的最大值
spring.servlet.multipart.max-file-size=10MB
#文件上传路径
#windows环境下上传文件保存目录
#spring.servlet.multipart.location=d:/restaurantRes
dao
package com.wyh.dao;
import com.wyh.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
* Description
* Author 魏一鹤
* Date 2021/10/22 16:24
*/
@Mapper
public interface IUserDao {
int addUsers(User user);
}
mapper
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wyh.dao.IUserDao">
<!--添加用户信息-->
<insert id="addUsers" parameterType="com.wyh.entity.User">
insert into t_user(uname,image,deptid,remark) values(#{uname},#{image},#{deptid},#{remark});
</insert>
</mapper>
entity实体
package com.wyh.entity;
/**
* Description
* Author 魏一鹤
* Date 2021/10/25 10:01
*/
public class User {
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public int getDeptid() {
return deptid;
}
public void setDeptid(int deptid) {
this.deptid = deptid;
}
public String getRemark() {
return remark;
}
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", uname='" + uname + '\'' +
", image='" + image + '\'' +
", deptid=" + deptid +
", remark='" + remark + '\'' +
'}';
}
public void setRemark(String remark) {
this.remark = remark;
}
private int uid;
private String uname;
private String image;
private int deptid;
private String remark;
}
service
int addUsers(User user);
service实现
@Override
package com.wyh.service.impl;
import com.wyh.dao.IUserDao;
import com.wyh.entity.User;
import com.wyh.service.IUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* Description
* Author 魏一鹤
* Date 2021/10/22 16:23
*/
@Service
public class IUserServiceImpl implements IUserService {
@Resource
private IUserDao userDao;
@Override
public int addUsers(User user) {
return userDao.addUsers(user);
}
}
controller
package com.wyh.controller;
import com.wyh.entity.User;
import com.wyh.service.IUserService;
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 javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
* Description
* Author 魏一鹤
* Date 2021/10/22 16:22
*/
@Controller
public class UserController {
@Resource
private IUserService userService;
//添加用户,文件上传
@RequestMapping("/addUser")
public String addUserUpload(MultipartFile file, HttpServletRequest req, User user){
//接收文件MultipartFile 获取对象HttpServletRequest xxx要和input的name对应
String uploadName=req.getServletContext().getRealPath("upload");
//判断upload文件夹是否存在是否为文件夹
File f=new File(uploadName);
if(!f.exists() || !f.isDirectory()){
f.mkdirs();
}
//获取原来的文件的名字
String fileName=file.getOriginalFilename();
// 截取后缀名、
String name=fileName.substring(fileName.lastIndexOf("."));
// 获取随机ID然后累加后缀名 成一个新的文件名
String UUName= UUID.randomUUID().toString()+name;
File file2=new File(uploadName+"/"+UUName);
String imgurl="upload"+file2.separator+UUName;
user.setImage(imgurl);
try {
file.transferTo(file2);
} catch (IllegalStateException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int count=userService.addUsers(user);
return "redirect:queryAllUsers";
}
}
jsp页面(部门下拉框是另外一个表的信息,忽略即可)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: 魏一鹤19991101
Date: 2021/10/25
Time: 9:53
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加用户</title>
</head>
<body>
<form action="addUser" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="uname"><br>
请选择头像:<input type="file" name="file" accept="image/gif,image/jpeg,image/jpg,image/png"><br>
简介:<textarea name="remark"></textarea><br>
请选择部门:
<select name="deptid">
<option>-----请选择部门-----</option>
<c:forEach items="${depts}" var="dept">
<option value="${dept.did}">${dept.dname}</option>
</c:forEach>
</select><br>
<input type="submit" value="添加">
</form>
</body>
</html>