Spring Boot 会员管理系统之处理文件上传功能

 更新时间:2018年03月19日 08:57:30   作者:longer499@163.com  
Spring Boot会员管理系统的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎。这篇文章主要介绍了Spring Boot会员管理系统之处理文件上传功能,需要的朋友可以参考下

温馨提示

Spring Boot会员管理系统的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎。所以,可以学习下这些知识。当然,直接入门的话使用是没问题,但是,涉及到一些异常和原理的话可能就有些困难。

1. 前端部分

在前端部分addMember.html是通过form表单来提交会员的信息,其中就包括了图片上传功能(这里涉及了文件上传操作),表单部分代码如下:

<form th:action="@{/admin/addMember}" method="post" enctype="multipart/form-data" id="addMember">
              <div class="file-field input-field">
                <div class="btn">
                  <span>选择头像文件</span>
                  <input id="file" type="file" name="iconPath" multiple="" placeholder="选择文件" accept="image/*" onchange="changeToop()">
                </div>
                <div class="file-path-wrapper">
                  <!--<input class="file-path validate" type="text" placeholder="Upload one or more files">-->
                  <img id="myimg" src="assets/iconPath/common.jpg" class="img-responsive img-thumbnail" style="width: 20%;height: 20%" />
                </div>
                <!--头像文件上传预览-->
                <script>
                  function Id(id){
                    return document.getElementById(id);
                  }
                  function changeToop(){
                    var file = Id("file");
                    if(file.value===''){
                      //设置默认图片
                      Id("myimg").src='assets/iconPath/common.jpg';
                    }else{
                      preImg("file","myimg");
                    }
                  }
                  //获取input[file]图片的url Important
                  function getFileUrl(fileId) {
                    var url;
                    var file = Id(fileId);
                    var agent = navigator.userAgent;
                    if (agent.indexOf("MSIE")>=1) {
                      url = file.value;
                    } else if(agent.indexOf("Firefox")>0) {
                      url = window.URL.createObjectURL(file.files.item(0));
                    } else if(agent.indexOf("Chrome")>0) {
                      url = window.URL.createObjectURL(file.files.item(0));
                    }
                    return url;
                  }
                  //读取图片后预览
                  function preImg(fileId,imgId) {
                    var imgPre =Id(imgId);
                    imgPre.src = getFileUrl(fileId);
                  }
                </script>
              </div>
              
              .......
              
            </form>

这里有一个注意事项:因为涉及文件上传,所以在form中需要加入enctype="multipart/form-data",而且就是input中的name属性是与后端中的Controller映射方法的传入参数名是一一对应的。

2. 后端代码实现

后端中对于SpringMVC框架可以对于文件进行处理然后我们可以通过传入参数的方式来接收文件

2.1 Controller处理传入文件

代码如下:

@PostMapping("/addMember")
  public String addMember(Member member, String gradeName, MultipartFile icon, Map<String, Object> model) {
    //处理上传文件
    try {
      if (icon == null)//首先判断上传文件不为null
        return "error";
      if (icon.getOriginalFilename().equals("")) //如果上传文件的原名为空字符串,则证明使用了默认图像
        member.setIconPath("/assets/icon/common.jpg"); //设置为我们的默认图像路径
      else
        //这里通过了自己编写的文件上传工具类来处理上传的MultipartFile,文件名设置为通过UUID产生的字符串
        member.setIconPath(FileUploadUtil.upload(icon, "/assets/icon/", UUIDRandomUtil.get32UUID()));
    } catch (Exception e) {
      e.printStackTrace();
      return "error";
    }
    
    .......
    
    return "addMemberSuccess";
  }

2.2 FileUploadUtil工具类保存文件

在Controller的MultipartFile文件传入后需要进一步,转变为FIle并且保存到磁盘当中,所以我分开处理,把Controller的传入文件交给FileUploadUtil工具类来处理,具体的代码如下:

public class FileUploadUtil {
  /**
   * 上传文件
   * @param multipartFile multipartFile
   * @param prefixPath 前缀路径,相对于整个项目中的路径,路径最前面不用加入“/”
   * @param fileName 上传后的文件名
   * @return 上传后最终的相对路径+文件名
   * @throws Exception 有可能空指针异常和IO异常
   */
  public static String upload(MultipartFile multipartFile, String prefixPath, String fileName) throws Exception {
    //得出上传的绝对路径
    String uploadPath = ClassUtils.getDefaultClassLoader().getResource("").getPath() +"/static"+ prefixPath;
    File file = new File(uploadPath);
    if (!file.exists())
      if (file.mkdirs())
        System.out.println("成功创建目录");
    //获取上传的后缀名
    String suffixName = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."));
    //新建最终确定的文件
    file = new File(uploadPath+fileName+suffixName);
    multipartFile.transferTo(file);
    return prefixPath+fileName+suffixName;
  }
}

上面中的ClassUtils是Spring提供的一个工具类,而调用方法getDefaultClassLoader().getResource("").getPath()是获取当前项目classpath下的路径。

以上便是本系统中关于文件上传的部分内容,该系统的源码以上传GitHub下载源码

总结

以上所述是小编给大家介绍的Spring Boot 会员管理系统之处理文件上传功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • java 中动态代理详解及实例

    java 中动态代理详解及实例

    这篇文章主要介绍了java 中动态代理详解及实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • Java InheritableThreadLocal用法详细介绍

    Java InheritableThreadLocal用法详细介绍

    InheritableThreadLocal继承了ThreadLocal,此类扩展了ThreadLocal以提供从父线程到子线程的值的继承:当创建子线程时,子线程接收父线程具有的所有可继承线程局部变量的初始值。 通常子线程的值与父线程的值是一致的
    2022-09-09
  • spring cloud 阿波罗 apollo 本地开发环境搭建过程

    spring cloud 阿波罗 apollo 本地开发环境搭建过程

    Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性
    2018-01-01
  • 如何在Spring中使用编码方式动态配置Bean详解

    如何在Spring中使用编码方式动态配置Bean详解

    这篇文章主要给大家介绍了关于如何在Spring中使用编码方式动态配置Bean的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • Spring核心容器之Bean创建过程详解

    Spring核心容器之Bean创建过程详解

    这篇文章主要介绍了Spring核心容器之Bean创建过程详解,获取 Bean 的方法是 getBean,其来自 BeanFactory 继承的AbstractAutowireCapableBeanFactory 抽象类继承的AbstractBeanFactory 抽象类中,需要的朋友可以参考下
    2023-11-11
  • Java中实现二叉树的遍历与重构

    Java中实现二叉树的遍历与重构

    这篇文章主要介绍了Java中实现二叉树的遍历与重构,树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合,把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的,需要的朋友可以参考下
    2023-10-10
  • Storm框架整合springboot的方法

    Storm框架整合springboot的方法

    Storm框架中的每个Spout和Bolt都相当于独立的应用,Strom在启动spout和bolt时提供了一个open方法(spout)和prepare方法(bolt)。这篇文章主要介绍了Storm框架整合springboot的方法,需要的朋友可以参考下
    2018-11-11
  • Mybatis-Plus中IdType.AUTO局部配置不生效的问题解决

    Mybatis-Plus中IdType.AUTO局部配置不生效的问题解决

    本文主要介绍了Mybatis-Plus中IdType.AUTO局部配置不生效的问题解决,数据库插入数据时,id的默认生成方式还是雪花算法,局部配置没有生效,下面就来解决一下,感兴趣的可以了解一下
    2023-09-09
  • Java多线程局域网聊天室的实现

    Java多线程局域网聊天室的实现

    在学习了一个学期的java以后,搞了一个多线程的聊天室,熟悉了一下服务器和客户机的操作。感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Java Web Axios实现前后端数据异步交互实例代码

    Java Web Axios实现前后端数据异步交互实例代码

    Axios作为一个流行的前端 HTTP 通信库,可以极大地简化前端与后端之间的数据交互,这篇文章主要介绍了Java Web Axios实现前后端数据异步交互的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09

最新评论