Spring Boot文件上传

打印 上一主题 下一主题

主题 811|帖子 811|积分 2433

5.3.1文件上传

开发Web应用时,文件上传是很常见的一个需求欣赏器通过表单形式将文件以流的形式通报给服务器,服务器再对上传的数据剖析处理惩罚。下面我们通过一个案例讲授如何使用SpringBoot实现文件上传,具体步调如下。
1.编写文件上传的表单页面

在chapter05项目根路径下的templates 模板引擎文件夹下创建一个用来上传文件的upload.html模板页面,内容如下列代码所示。
  1. <!DOCTYPE html>
  2. <html lang="en"xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4.    <meta charset="UTF-8">
  5.    <meta http-equiv="Content-Type" content=“text/html; charset=UTF-8”>
  6.    <title>动态添加文件上传列表</title>
  7.    <link th:href="@{/login/css/bootstrap.min.css}" rel="stylesheet">
  8.    <script th:src="@{/login/js/jquery.min.js}"></script>
  9. </head>
  10. <body>
  11. <div th:if="${uploadStatus}" style="color: red" th:text="${uploadStatus}">
  12. 上传成功</div>
  13.    <form th:action="@{/uploadFile}"method="post" enctype="multipart/form-data">
  14.        上传文件:&nbsp;&nbsp;<input type="button"value="添加文件"onclick="add()"/>
  15.        <div id-"file" style="margin-top:10px;"th:value="文件上传区域"> </div>
  16.        <input id="submit" type="submit" value="上传"
  17.               style="display: none;margin-top: 10px;"/>
  18.    </form>
  19. <script type="text/javascript">
  20.    //动态添加上传按钮
  21.    function add(){
  22.        var innerdiv = "<div>";
  23.        innerdiv += "<input type='file' name='fileUpload' required='required'>"+
  24.                    "<input type='button' value-'删除’ onclick='remove(this)'>";
  25.        innerdiv +="</div>";
  26.        $("#file").append(innerdiv);
  27.        //打开上传按钮
  28.        $("#submit").css("display","block");
  29.    }
  30.    //删除当前行<div>
  31.    function remove (obj) {
  32.        $(obj).parent().remove();
  33.        if($("#file div").length ==0){
  34.           $("#submit").css("display","none");
  35.        }
  36.    }
  37. </script>
  38. </body>
  39. </html>
复制代码
在上述代码中,第1318行代码的<form>标签用于创建上传文件的表单。第1937行是一段JavaScript脚本代码,用来处理惩罚用户动态添加大概移除上传输入框。
别的在文件5-11中第8行代码还引入了静态资源目录下的login/js中的jquery.min.js文件,因此,这里需要在项目resources/static/login 目录下创建一个 js 文件夹,并引入jquery.min.js文件。


2.在全局设置文件中添加文件上传的相关设置
在全局设置文件 application.properties 中添加文件上传的相关设置,内容如下列代码所示。
  1. # thymeleaf 页面缓存设置(默认为true),开发中为方便调试应设置为false,上线稳定后应保持默认true
  2. spring.thymeleaf.cache=false
  3. # 配置国际化文件基础名
  4. spring.messages.basename=i18n.login
  5. # 单个上传文件大小限制(默认为1MB)
  6. spring.servlet.multipart.max-file-size=10MB
  7. # 总上传文件大小限制(默认为10MB)
  8. spring.servlet.multipart.max-request-size=50MB
复制代码
在上述代码中,在项目全局设置文application.properties已有设置的基础上,对文件上传过程中的上传巨细举行了设置。其中,spring.servlet.multipart.max-file-size用来设置单个上传文件的巨细限制,默认值为1MB,上述文件设置为10MB;spring.servlet.multipart.maxrequest-size 用来设置所有上传文件的巨细限制,默认值为10MB,这里设置为50MB。假如上传文件的巨细超出限制,会提示“FileUploadBaseyFileSizeLimitExceededException:The field fleUpload exceeds its maximum permitted size of 1048576 bytes"非常信息,因此开发者需要联合现实需求公道设置文件巨细。
3.举行文件上传处理惩罚,实现文件上传功能

在之前创建的com.itheima.controller 包下创建一个管理文件上传下载的控制类FileController,用于实现文件上传功能,内容如下列代码所示。
  1. import org.springframework.stereotype.Controller;
  2. import org.springframework.ui.Model;
  3. import org.springframework.web.bind.annotation.*;
  4. import org.springframework.web.multipart.MultipartFile;
  5. import java.io.File;
  6. import java.util.UUID;
  7. /**
  8. *文件管理控制类
  9. */
  10. @Controller
  11. public class FileController
  12.    // 向文件上传页面跳转
  13.    @GetMapping("/toupload")
  14.    public String toupload(){
  15.       return "upload";
  16.    }
  17.    //文件上传管理
  18.    @PostMapping("/uploadFile")
  19.    public String uploadFile (MultipartFile[] fileupload, Model model){
  20.    //默认文件上传成功,并返回状态信息
  21.    model.addattribute("uploadStatus",“上传成功!");
  22.    for (MultipartFile file : fileUpload) {
  23.       // 获取文件名以及后级名
  24.       String fileName = file.getOriginalFilename();
  25.       // 重新生成文件名(根据具体情况生成对应文件名)
  26.       fileName = UUID.randomUUID()+""+fileName;
  27.       // 指定上传文件本地存储目录,不存在则需要提前创建
  28.       String dirPath = "F:/file/";
  29.       File filePath = new File(dirPath);
  30.       if(!filePath.exists()){
  31.          filePath.mkdirs();
  32.       }
  33.       try {
  34.          file.transferTo(new File(dirPath+fileName))
  35.       } catch (Exception e) {
  36.          e.printStackTrace();
  37.         //上传失败,返回失败信息
  38.         model.addAttribute("uploadstatus",,"上传失败:"+e.getMessage());
  39.       }
  40.    }
  41.    //携带上传状态信息回调到文件上传贞面
  42.    return "upload";
  43. }
  44. }
复制代码
文件5-13中,toUpload()方法用于处理惩罚路径为“/toUpload”的GET哀求,并返回上传页面的路径。uploadFile()方法用于处理惩罚路径为“/uploadFile”的POST哀求,假如文件上传成功,则会将上传的文件重命名并存储在“F:/ile/”目录。假如上传失败,则会提示上传失败的相关信息。需要留意的是,uploadFile()方法的参数fileUpload 的名称必须与上传页面中的name 值一致。
4.效果测试

启动项目,项目启动成功后,在欣赏器上访问“http:/localhost-8080/oUpload",效果如图5-18所示。
单击图5-13所示窗口中的【添加文件】按钮,能够动态添加多个文件,效果如图5-14所示。


在图5-14所示的文件上传页面中,共添加了3个上传的文件,每个上传文件后方对应一个【删除】按钮,用于移除上传的文件。单击文件上传页面的【上传】按钮,假如存在未选择的文件,会提示“请选择一个文件”,否则选择好的上传文件会举行上传处理惩罚,效果如图5-15所示。
从图5-15可以看出,文件上传成功后页面会提示“上传成功”。为了验证文件上传效果,打开上传文件的存储目录“F:/ile/”,效果如图5-16所示。


从图5-16可以看出,在定制的上传文件存储目录“F:/ile/”下,出现了选择上传的3个不同类型的文件,同时文件名也根据设置举行了相应的修改,读者还可以打开每个文件查看具体的文件内容。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表