Spring Boot 学习(一) 文件上传

注意:

跳转html文件一定要放在同一个静态资源文件夹下,否则会出现各种报错

 

文件上传:

首先编写html的form表单提交,对于form表单的上传记得添加enctype,对于多文件上传,需要在input标签下添加multiple

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>form</h1>
<form method="post" action="/world/upload" enctype="multipart/form-data">
用户名:<input type="text" name="username"><br>
上传文件:<input type="file" name="userimg"><br>
多文件:<input type="file" name="photo" multiple><br>
<button type="submit">提交</button>
</form>
</body>
</html>

其次编写关于文件上传的Controller,跳转页面使用Get请求,与此同时表单提交的html在form文件夹下,此时需要添加对于路径,文件上传需要用到post请求,值得注意的是获取文件属性是通过注解@RequestPart来实现,

 

package com.sp.Controller;


import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@Slf4j
@Controller
public class FromSubmit {

    @GetMapping("/form")
    public String form_submit() {

        return "form/formSubmit";
    }
    @PostMapping("/upload")
    public String upload(@RequestParam("username") String username,
                         @RequestPart("userimg") MultipartFile userimg,         //MultipartFile会自动封装上传的文件
                         @RequestPart("photo") MultipartFile[] photo) {        //多文件上传保存在数组中
        log.info("上传的信息:username = {}, userimg = {}, photo = {}",
                username, userimg.getSize(), photo.length);
        return "index";   //跳转到index页面
    }
}

 

之后对html上传的文件传输到本地的磁盘中保存

通过transferTo方法,以及文件流里的方法获取文件名,文件大小等方法

@PostMapping("/upload")
    public String upload(@RequestParam("username") String username,
                         @RequestPart("userimg") MultipartFile userimg,         //MultipartFile会自动封装上传的文件
                         @RequestPart("photo") MultipartFile[] photos) throws IOException {
        log.info("上传的信息:username = {}, userimg = {}, photo = {}",
                username, userimg.getSize(), photos.length);
        if (!userimg.isEmpty()) {
            //获取原始的文件名
            String originalFilename = userimg.getOriginalFilename();
            //保存文件到指定的本地目录
            userimg.transferTo(new File("D:\\code\\img\\"+originalFilename));
        }
        if (photos.length > 0) {
            for (MultipartFile photo:photos) {
                if(!photo.isEmpty()) {
                    String originalFilename = photo.getOriginalFilename();   //获取文件的原始名字
                    photo.getSize();   //获取文件大小
                    photo.transferTo(new File("D:\\code\\img\\"+originalFilename));
                }
            }
        }
        return "index";
    }

 运行之后在本地就有了图片信息

 

 

 

 

 

 

 

这里需要注意的几个点:

1..如果配置了拦截器,那么如果需要测试的情况,则在对应的请求上添加不拦截的部分,如果是登陆的话可以不加,在登陆也完成拦截情况的处理

2.关于页面跳转的问题,如果对应的html页面在不同的文件夹下,那么需要将其放在同一静态资源文件夹,否则很容易产生报错

3.关于文件上传,springboot默认配置了最大上传的大小,此时需要更改上传文件大小

4.关于多文件上传,需要将其保存在一个数组中@RequestPart("photo") MultipartFile[] photo

 

 

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=100MB

 

 

 在springboot中有一个MultipartAutoConfiguration,里面对应的组件

@EnableConfigurationProperties(MultipartProperties.class)

中默认声明了文件大小,单张照片最大1MB,最多总请求量最大10MB

 

@ConfigurationProperties(prefix = "spring.servlet.multipart", ignoreUnknownFields = false)
public class MultipartProperties {

    /**
     * Whether to enable support of multipart uploads.
     */
    private boolean enabled = true;

    /**
     * Intermediate location of uploaded files.
     */
    private String location;

    /**
     * Max file size.
     */
    private DataSize maxFileSize = DataSize.ofMegabytes(1);

    /**
     * Max request size.
     */
    private DataSize maxRequestSize = DataSize.ofMegabytes(10);

    /**
     * Threshold after which files are written to disk.
     */
    private DataSize fileSizeThreshold = DataSize.ofBytes(0);

    /**
     * Whether to resolve the multipart request lazily at the time of file or parameter
     * access.
     */
    private boolean resolveLazily = false;
View Code

 

 

 

 

posted @ 2021-06-30 12:04  YuyuFishSmile  阅读(233)  评论(0)    收藏  举报