注册时异步上传头像回显

  • pom.xml 

        <?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <parent>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.4.5</version>
                <relativePath/> <!-- lookup parent from repository -->
            </parent>
            <groupId>com.csj</groupId>
            <artifactId>fileuploaddownloads</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <name>fileuploaddownloads</name>
            <description>Demo project for Spring Boot</description>
            <properties>
                <java.version>1.8</java.version>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-data-jpa</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </dependency>
    
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-thymeleaf</artifactId>
                </dependency>
    
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <scope>runtime</scope>
                </dependency>
                <dependency>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid</artifactId>
                    <version>1.0.19</version>
                </dependency>
    
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                    <optional>true</optional>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-test</artifactId>
                    <scope>test</scope>
                </dependency>
            </dependencies>
    
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <configuration>
                            <excludes>
                                <exclude>
                                    <groupId>org.projectlombok</groupId>
                                    <artifactId>lombok</artifactId>
                                </exclude>
                            </excludes>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
    
        </project>
    

  • yml 

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
      thymeleaf:
        prefix: classpath:/templates/ # 配置视图解析器 前缀 templates为视图文件夹  templates没有这个文件夹的话自己手动建再 resources里面建
        suffix: .html #.html为后缀
        encoding: UTF-8 #编码格式
      #jpa 测试
      jpa:
        hibernate:
          ddl-auto: update # 新增数据库链接必须的参数
        # 控制台显示SQL
        show-sql: true
        properties:
          hibernate.format_sql: true
      servlet:
        multipart: # 设置文件上传的大小
          enabled: true
          max-file-size: 1GB  # 最大支持文件大小 
          max-request-size: 1GB # 最大支持请求大小
          file-size-threshold: 0 
    
  • pojo

    package com.csj.pojo;
    ​
    ​
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    ​
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    ​
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Entity(name = "user")
    public class User {
    ​
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;
        private String name;
        private String pwd;
        private String headPortrait; // 用户头像的存放地址
    ​
    }

  • mapper

    package com.csj.mapper;
    ​
    import com.csj.pojo.User;
    import org.springframework.data.jpa.repository.JpaRepository;
    ​
    public interface UserMapper extends JpaRepository<User,Integer> {
        User findByNameAndPwd(String name, String pwd);
    }
  • controller

    package com.csj.controller;
    ​
    import com.csj.mapper.UserMapper;
    import com.csj.pojo.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    ​
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.UUID;
    ​
    // 负责登录注册用户
    @Controller
    public class LoginController {
    ​
        @Autowired
        private UserMapper userMapper;
    ​
        @RequestMapping("registered")
        public String registered() {
            return "registered";
        }
    ​
        /**
         * 处理图片, 响应图片的路径给前端显示
         */
        @RequestMapping("uploadHead")
        @ResponseBody
        public String uploadHead(@RequestParam("file") MultipartFile file, User user) throws IOException {
            String fileName = file.getOriginalFilename(); // 上传的源文件名 包括后缀
            // 这是个临时保存路径 ,项目的target文件 
            String savePath = "C:\\代码\\fileuploaddownloads\\target\\classes\\static"; //  保存头像的路径,这里用 项目的 target的静态路径 清楚重新打包就会丢失图片
    ​
            String saveFileName = UUID.randomUUID().toString() + "-" + fileName; // 生成唯一图片名 
            System.out.println(saveFileName);
            InputStream inputStream = file.getInputStream(); // 获取上传文件读的流
            FileOutputStream fos = new FileOutputStream(new File(savePath, saveFileName)); // savePath指定上传路径,saveFileName 指定上传后的名字
    //        fos.write(inputStream.read());
            byte[] bytes = new byte[inputStream.available()];
            int len = 0;
            while ((len = inputStream.read(bytes)) != -1) { // 不等于-1 说明还没读完 接着读
                fos.write(bytes, 0, len); // 开始写入
            }
    ​
            return saveFileName; // 返回上传的图片的名字
        }
    ​
        @RequestMapping("saveUser")
        public String addUser(User user) {
            System.out.println(user);
            User save = userMapper.save(user);
            if (save != null) {
                return "redirect:/login"; // 添加成功跳转到登录页, 这样地址栏上的地址也变了
            } else {
                return "redirect:/registered"; // 添加失败重定向到注册页面
            }
        }
    ​
        @RequestMapping("login")
        public String login() {
            return "login";
        }
    ​
        @RequestMapping("dologin")
        public String dologin(User user) {
            User user1 = userMapper.findByNameAndPwd(user.getName(), user.getPwd());
            if (user1 != null) {
                return "redirect:/list"; // 重定向去访问列表请求 
            } else {
                return "redirect:/login";
            }
        }
    }
    ​
  • 启动类 

    package com.csj;
    ​
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    ​
    @SpringBootApplication
    @EnableJpaRepositories
    public class FileuploaddownloadsApplication {
    ​
        public static void main(String[] args) {
            SpringApplication.run(FileuploaddownloadsApplication.class, args);
        }
    ​
    }
  • 注意要引入 jquery.js

  • registered.html

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org"> <!-- 引入Thymeleaf的模板 才可以用它的标签, 才能用El表达式之类的 -->
    <html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html ; charset = utf-8"/>
        <title>Title</title>
    </head>
    <body>
    
    <form th:action="@{/saveUser}" method="post">
        <!-- 头像 ,accept="image/png,image/jpeg" 只能选择以...结尾的, 这里是只能选择图片-->
        <input type="file" name="file" id="tou" multiple accept="image/png,image/jpeg"> </br>
        <img style="visibility:hidden;padding: 0;margin: 0" id="img"/></br>
        <input type="hidden" name="headPortrait" id="headPortrait" >
        <input type="text" name="name" > </br>
        <input type="text" name="pwd"> </br>
        <input type="submit" value="注册">
    </form>
    
    </body>
    <style>
    
    </style>
    <script type="text/javascript" src="/js/jquery.js"></script>
    <script type="text/javascript">
        let fileM=document.querySelector("#tou");
        $("#tou").on("change", function () {
            console.log(document.getElementById("tou").name)
            let fileObj = fileM.files[0];
            console.log(fileObj)
            let formData = new FormData();
            formData.append('file', fileObj);
            let img = document.getElementById("img");
            $.ajax({
                type: 'post',
                url: 'http://localhost:8080/uploadHead',
                data: formData,
                contentType: false,
                processData: false,
                success: (e) => {
                    console.log(e)
                    img.src = e;
                    img.style.visibility = "visible" // 取消隐藏 让其看得见
                    $("#headPortrait").val(e) // 动态给 headPortrait(头像) 文本框复制
    
                }
    
            });
    
    
        })
    
    </script>
    </html>
  • login.html

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org"> <!-- 引入Thymeleaf的模板 才可以用它的标签, 才能用El表达式之类的 -->
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        登录页面
        <form action="/dologin" method="post">
            <input type="text" name="name"/>
            <input type="text" name="pwd"/>
            <input type="submit" value="登录">
        </form>
    </body>
    </html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值