SpringBoot之SpringBoot實現文件上傳

前言

在企業級項目開發過程當中,上傳文件是最經常使用到的功能。SpringBoot集成了SpringMVC,固然上傳文件的方式跟SpringMVC沒有什麼不一樣。

本章目標

使用SpringBoot項目完成單個、多個文件的上傳處理,並將上傳的文件保存到指定目錄下。這裏咱們會使用layui,若是有不懂layui的同行能夠去layui官網

官網地址:https://www.layui.com/

項目構建

1.項目搭建的主要步驟我在這裏就很少重複了,咱們直接勾選Web依賴,而後生成項目,結構以下

form表單文件上傳

單文件上傳

1.因爲SpringBoot的項目結構不一樣於SSM,不少企業也會用jsp頁面,對我而言我不太喜歡,通常咱們的jsp頁面都是放在/src/main/webapp/WEB_INF/jsp,如今咱們在這個目錄先配置html,若是有須要配置jsp頁面的同行把後綴名改一下就能夠了,如今咱們去application.properties中配置訪問的頁面以及目錄,目錄結構以下

2.application.properties配置以下

spring.mvc.view.prefix=/WEB_INF/jsp/

spring.mvc.view.suffix=.html

 3.如今去控制器配置一下訪問的頁面,新建控制器IndexController,代碼以下,而後啓動運行

IndexControllerhtml

package com.demo03.demo_03.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class IndexController { @RequestMapping("/") public String index(){ return  "index"; } }

4.如今咱們訪問一下頁面,index.html代碼以下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>單圖片上傳</title>
</head>
<body>
<form action="" enctype="multipart/form-data" method="post">
    <input type="file" name="file">
    <input type="submit" value="圖片上傳">
</form>
</body>
</html>

5.如今咱們去控制器編寫代碼,更新後的IndexController以下

package com.demo03.demo_03.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.util.UUID; @Controller public class IndexController { @RequestMapping("/") public String index(){ return  "index"; } //單圖片上傳
    @RequestMapping("/upload") @ResponseBody public String upload(HttpServletRequest request, MultipartFile file){ try{ //上傳目錄地址
            String uploadDir=request.getSession().getServletContext().getRealPath("/")+"upload/"; //判斷目錄是否存在,若是不存在則構建目錄
            File dir=new File(uploadDir); if(!dir.mkdir()){ dir.mkdir(); } //文件名後綴
            String suffix=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); //上傳文件名
            String fileName= UUID.randomUUID()+suffix; //服務端保存的文件對象
            File saveFile=new File(uploadDir+fileName); //將上傳的文件寫入到服務器端文件內
 file.transferTo(saveFile); }catch (Exception e){ e.printStackTrace(); return "上傳失敗"; } return "上傳成功"; } }

6.如今咱們去index.html中上傳圖片,效果以下,能夠看到咱們圖片上傳成功了

index.html更新後java

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <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>

 

多文件上傳

1.因爲咱們要用到多圖片上傳,因此咱們先去控制器更新一下代碼,更新後的IndexController代碼以下

package com.demo03.demo_03.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.util.UUID; @Controller public class IndexController { @RequestMapping("/") public String index(){ return  "index"; } //單圖片上傳
    @RequestMapping("/upload") @ResponseBody public String upload(HttpServletRequest request, MultipartFile file){ try{ //上傳目錄地址
            String uploadDir=request.getSession().getServletContext().getRealPath("/")+"upload/"; //判斷目錄是否存在,若是不存在則構建目錄
            File dir=new File(uploadDir); if(!dir.mkdir()){ dir.mkdir(); } //文件名後綴
            String suffix=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); //上傳文件名
            String fileName= UUID.randomUUID()+suffix; //服務端保存的文件對象
            File saveFile=new File(uploadDir+fileName); //將上傳的文件寫入到服務器端文件內
 file.transferTo(saveFile); }catch (Exception e){ e.printStackTrace(); return "上傳失敗"; } return "上傳成功"; } //提取上傳圖片的公共方法
    /* * uploadDir 上傳目錄 * file上傳對象 * */
    public  void  executeUpload(String uploadDir,MultipartFile file) throws IOException { //文件名後綴
        String suffix=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); //上傳文件名
        String fileName=UUID.randomUUID()+suffix; //服務端保存文件對象
        File saveFile=new File(uploadDir+fileName); //將上傳的文件寫入到服務器端文件內
 file.transferTo(saveFile); } //多文件上傳
    @RequestMapping("/uploadArray") @ResponseBody public String uploadArray(HttpServletRequest request,MultipartFile[] file){ try { //上傳目錄地址
            String uploadDir=request.getSession().getServletContext().getRealPath("/")+"upload/"; //若是目錄不存在,則構建目錄
            File dir=new File(uploadDir); if(!dir.exists()){ dir.mkdir(); } //遍歷文件數組執行上傳
            for(int i=0;i<file.length;i++){ if(file[i]!=null){ //調用上傳的方法
 executeUpload(uploadDir,file[i]); } } }catch (Exception e){ e.printStackTrace(); return "上傳失敗"; } return "上傳成功"; } }

2.更新index.html頁面,發現上傳成功,更新後的index.html以下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>單圖片上傳</title>
</head>
<body>
<h2>單文件上傳</h2>
<form action="/upload" enctype="multipart/form-data" method="post">
    <input type="file" name="file">
    <input type="submit" value="圖片上傳">
</form>
<h1>多個文件上傳</h1>
<form action="/uploadArray" enctype="multipart/form-data" method="post">
    <input type="file" name="file">
    <input type="file" name="file">
    <input type="file" name="file">
    <input type="submit" value="圖片上傳">
</form>
</body>
</html>

相關文章
相關標籤/搜索