springboot文件上传到本地电脑,项目目录,路径保存到数据库,页面显示上传的图片

46 篇文章 5 订阅

文件上传三大要素
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>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小花皮猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值