Springboot实现文件上传

一、新建Springboot项目并配置

1.pom.xml核心依赖

<!--spring boot web的依赖-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!--thymeleaf模版依赖-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2.全局配置文件application.yml,注意yml文件格式

spring:
  servlet:
    multipart:
      max-file-size: 500MB 		 #上传单文件大小
      max-request-size: 500MB    #上传所有文件大小
二、测试页面

1.在resources下新建templates文件夹,在templates下新建upload.html页面用来测试
upload.html代码


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传测试页面title>
head>
<body>
<h3>文件上传测试h3>
<br>
<hr/>
<form method="post" enctype="multipart/form-data" action="/upload">
    <p>
        文件<input type="file" name="file"/>
    p>
    <p>
        <input type="submit" value="开始上传"/>
    p>

form>
body>
html>

注意:

method=“post” enctype=“multipart/form-data”

三、后端

1.新建包controller,并创建类UploadController.java

package com.basic.hellorabbit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
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;

/**
* @Description:    文件上传
* @Author:         Joe
* @CreateDate:     2020/3/14 16:47
*/
@Controller
public class UploadController {

    /**
     * 跳转到单文件上传测试页面
     * @return
     */
    @RequestMapping(value = "/index",method = RequestMethod.GET)
    public String toUpload(){
        return "upload";
    }

    /**
     * 单文件上传
     * @param file
     * @return
     */
    @RequestMapping(value = "/upload",method = RequestMethod.POST)
    @ResponseBody
    public String uploadFile(MultipartFile file, HttpServletRequest request){ //file必须与表单中name的值一致
        try {
            //1.创建文件在服务器端路径
            String dir = request.getServletContext().getRealPath("/upload");
            File file1 = new File(dir);
            if (!file1.exists()){ //如果文件路径不存在
                file1.mkdirs();   //就创建文件夹
            }
            //2.给文件生成一个新的存放名,防止重名
            //2.1 截取上传文件的后缀(扩展名)
            String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
            //2.2 新名字采用UUID+原始扩展名
            String fileName = UUID.randomUUID().toString()+fileSuffix;
            //3.文件新路径+文件全名
            File file2 = new File(file1+"/"+fileName);
            //4.开始上传
            file.transferTo(file2);
        }catch (Exception e){
            e.printStackTrace();
            return "文件上传失败";
        }
        return "文件上传成功";

    }
}

2.在启动类配置包扫描路径,在src/main下新建webapp文件夹,即可启动进行测试

在这里插入图片描述Springboot实现文件上传_第1张图片

四、文件批量上传

1.upload2.html页面


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件批量上传测试页面title>
head>
<body>
<h3>文件批量上传测试h3>
<br>
<hr/>
<form method="post" enctype="multipart/form-data" action="/upload2">
    <p>
        文件a<input type="file" name="file"/>
    p>
    <p>
        文件b<input type="file" name="file"/>
    p>
    <p>
        文件c<input type="file" name="file"/>
    p>
    <p>
        <input type="submit" value="开始批量上传"/>
    p>

form>
body>
html>

2.后端UploadController.java新增方法代码

	/**
     * 跳转到批量上传测试页面
     * @return
     */
    @RequestMapping(value = "/index2",method = RequestMethod.GET)
    public String toUpload2(){
        return "upload2";
    }

    /**
     * 文件批量上传
     * @param file
     * @return
     */
    @RequestMapping(value = "/upload2",method = RequestMethod.POST)
    @ResponseBody
    public String uploadFile2(MultipartFile[] file, HttpServletRequest request){ //file必须与表单中name的值一致
        try {
            String dir = request.getServletContext().getRealPath("/upload");
            File file1 = new File(dir);
            if (!file1.exists()){
                file1.mkdirs();  
            }
            for (int i = 0; i < file.length; i++) {
                String fileSuffix = file[i].getOriginalFilename().substring(file[i].getOriginalFilename().lastIndexOf("."));
                String fileName = UUID.randomUUID().toString()+fileSuffix;
                File file2 = new File(file1+"/"+fileName);
                file[i].transferTo(file2);
            }
        }catch (Exception e){
            e.printStackTrace();
            return "文件批量上传失败";
        }
        return "文件批量上传成功";
    }

你可能感兴趣的:(常用代码块与笔记,spring,boot,java,upload,intellij,idea,spring)