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,代碼如下,然后啟動運行

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;

@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更新后

<!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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM