SpringBoot從入門到精通十一(SpringBoot文件上傳的兩種方法)

前言

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

本章目標

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

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

搭建項目

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

表單文件上傳

  單文件上傳

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,代碼以下,而後啓動運行mvc

IndexControllerapp

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代碼以下dom

<!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以下webapp

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>

3)基本的表單上傳如上案例,SpringBoot上傳文件時限制了咱們上傳文件最大容量爲:1048576 bytes,那咱們須要上傳超過配置的文件時修改怎麼作呢?打開application.properties配置文件,加入spring.http.multipart.max-file-size以及spring.http.multipart.max-request-size配置信息,配置以下:

 

Ajax異步圖片上傳

  單圖片上傳

  多圖片上傳

總結

經過本章的學習,咱們已經能夠學會使用兩種方法實現文件上傳,在之後大多數的開發中咱們都是首選異步文件上傳,因此建議各位把異步上傳

相關文章
相關標籤/搜索