您的位置:

基于Springboot的MultipartFile多文件上传

一、MultipartFile简介

MultipartFile是Springframework中的接口,它代表了上传文件的数据类型。MultipartFile允许我们获取文件名、大小、内容类型以及文件字节流等信息。它是Springboot实现文件上传的核心接口。

二、实现多文件上传

在Springboot中,我们可以非常方便地实现多文件上传,具体步骤如下:

1、在前端实现多文件选择

{@code

  
<input type="file" name="file1" multiple>
<input type="file" name="file2" multiple>
}

在前端页面中,我们使用`<input type="file">`标签来实现文件选择,设置`multiple`属性以支持多文件选择。

2、编写Controller接收上传文件

{@code
@RestController
public class FileUploadController {

    @PostMapping("/upload")
    public String upload(@RequestParam("file1") MultipartFile[] file1,
                         @RequestParam("file2") MultipartFile[] file2) {
        //...具体实现略
        return "upload success";
    }
}
}

在Controller中,我们通过`@RequestParam`注解来接收上传文件,可以通过设置数组类型或者List类型来支持多文件上传。需要注意的是,参数名必须与前端页面中`<input>`标签中`name`属性值一致。

3、处理上传文件

{@code
Service
public class FileUploadService {

    public void uploadFiles(MultipartFile[] files) throws Exception {
        for (MultipartFile file : files) {
            // 获取文件名
            String fileName = file.getOriginalFilename();
            // 获取文件大小
            long fileSize = file.getSize();
            // 获取文件类型
            String fileType = file.getContentType();
            // 获取文件字节流
            byte[] fileBytes = file.getBytes();
            // ...对上传文件进行保存、处理等操作
        }
    }
}
}

在处理上传文件的Service中,我们可以通过MultipartFile提供的方法获取文件相关信息,如文件名、大小、类型、字节流等。可以根据这些信息对上传文件进行保存、处理等操作。

三、文件上传异常处理

在文件上传的过程中,可能会出现各种异常,Springboot提供了多种方式进行异常处理。

1、全局异常处理

{@code
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public String handleException(Exception e) {
        return "服务器异常:" + e.getMessage();
    }
}
}

可以通过@ControllerAdvice注解设置全局异常处理的类,使用@ExceptionHandler注解来处理Exception类的异常。

2、上传文件大小限制

{@code
@Configuration
public class MultipartConfigConfig {

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        // 设置单个文件大小限制
        factory.setMaxFileSize(DataSize.ofMegabytes(10));
        // 设置总上传文件大小限制
        factory.setMaxRequestSize(DataSize.ofMegabytes(100));
        return factory.createMultipartConfig();
    }
}
}

可以通过@Configuration注解设置上传文件大小限制。在MultipartConfigFactory中设置单个文件大小限制和总上传文件大小限制,并通过@Bean注解将MultipartConfigElement注入到Spring容器中。

3、文件类型限制

{@code
@Component
public class FileUploadComponent {

    private List allowTypes = Arrays.asList("image/jpeg", "image/png", "image/gif");

    public void uploadFiles(MultipartFile[] files) throws Exception {
        for (MultipartFile file : files) {
            String fileType = file.getContentType();
            if (!allowTypes.contains(fileType)) {
                throw new Exception("不支持的文件类型");
            }
            // ...对上传文件进行保存、处理等操作
        }
    }
}
}
  

可以通过在上传文件前判断文件类型是否符合要求来进行文件类型限制。在FileUploadComponent中设置允许上传文件类型的列表,如果上传的文件类型不在列表中,则抛出不支持的文件类型异常。

四、总结

通过以上步骤,我们可以在Springboot中轻松实现MultipartFile多文件上传功能。在实际开发中,我们可以根据具体需求进行上传文件大小限制、文件类型限制等处理,并进行异常处理来提高系统的健壮性。