您的位置:

Spring Boot多文件上传

一、Spring Boot多文件上传回显

在Spring Boot中,多文件上传的回显可以通过以下的步骤实现:

1. 编写前端页面,设置一个文件上传的表单

<form method="POST" action="/upload" enctype="multipart/form-data">
  Select files: <input type="file" name="files" multiple>
  <input type="submit" value="Upload">
</form>

2. 在Controller中添加上传文件处理的方法

@PostMapping("/upload")
public String uploadFiles(@RequestParam("files") MultipartFile[] files, Model model) {
    // 处理上传的文件
    model.addAttribute("files", Arrays.asList(files));
    return "uploadResult";
}

3. 编写上传结果回显页面uploadResult.html

<h2>Uploaded Files:</h2>
<% for (MultipartFile file : files) { %>
    <% if (!file.isEmpty()) { %>
        <p>Name: ${file.originalFilename}</p>
        <p>Type: ${file.contentType}</p>
        <p>Size: ${file.size} bytes</p>
    <% } else { %>
        <p>No file selected.</p>
    <% } %>
<% } %>

二、Spring Boot多文件上传带其他参数

如果上传的文件还需要其他参数的支持,只需要在表单中添加其他的参数即可,例如:

<form method="POST" action="/uploadWithParams" enctype="multipart/form-data">
  <input type="text" name="title">
  Select files: <input type="file" name="files" multiple>
  <input type="submit" value="Upload">
</form>

在Controller中添加上传文件处理的方法,将其他参数和上传的文件一起处理即可:

@PostMapping("/uploadWithParams")
public String uploadFilesWithParams(@RequestParam("title") String title,
                                     @RequestParam("files") MultipartFile[] files,
                                     Model model) {
    // 处理上传的文件和其他参数
    model.addAttribute("title", title);
    model.addAttribute("files", Arrays.asList(files));
    return "uploadResultWithParams";
}

三、Spring Boot文件下载

文件下载可以使用Spring Boot的内置资源处理器来实现,只需要在Controller中添加方法即可:

@GetMapping("/downloadFile")
public ResponseEntity<Resource> downloadFile(@RequestParam("fileName") String fileName) {
    Resource resource = fileStorageService.loadFileAsResource(fileName);

    return ResponseEntity.ok()
            .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
            .body(resource);
}

四、Spring MVC文件上传详解

Spring MVC的文件上传需要在servlet.xml中添加multipartResolver来处理请求中包含的文件,同时需要在Controller中添加上传文件的方法。

1. 在servlet.xml中添加multipartResolver,例如:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

2. 在Controller中添加上传文件的处理方法

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public ModelAndView upload(@RequestParam("file") MultipartFile file) {
    // 处理上传的文件
    ModelAndView modelAndView = new ModelAndView("uploadResult");
    modelAndView.addObject("fileName", file.getOriginalFilename());
    return modelAndView;
}

五、Spring Boot上传与下载

Spring Boot实现文件上传和下载比Spring MVC更加的简单,只需要使用Spring Boot内置的MultipartFile类处理上传的文件,使用Resource类处理下载的文件即可。

1. 上传文件处理方法

@PostMapping("/uploadFile")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
    String fileName = fileStorageService.storeFile(file);

    return ResponseEntity.ok()
            .body("File uploaded successfully. Filename: " + fileName);
}

2. 下载文件处理方法

@GetMapping("/downloadFile/{fileName:.+}")
public ResponseEntity<Resource> downloadFile(@PathVariable String fileName) {
    Resource resource = fileStorageService.loadFileAsResource(fileName);

    return ResponseEntity.ok()
            .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
            .body(resource);
}

六、Spring Boot文件上传

Spring Boot的文件上传与Spring MVC非常相似,只需要在Controller中添加上传文件的处理方法即可。

@PostMapping("/uploadFile")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
    // 处理上传的文件
    String fileName = file.getOriginalFilename();
    return ResponseEntity.ok()
            .body("File uploaded successfully. Filename: " + fileName);
}

七、Spring Boot文件上传大小限制解决

Spring Boot默认限制文件上传大小为1MB,可以通过配置application.properties文件来修改这个限制:

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

八、Spring Boot上传大文件

上传大文件可以使用以下的方法:

1. 在application.properties文件中增加如下配置:

spring.servlet.multipart.max-file-size=10GB
spring.servlet.multipart.max-request-size=10GB

2. 推荐使用非阻塞IO的方式来处理上传大文件,例如:

@Autowired
private ReactorResourceFactory reactorResourceFactory;

@Autowired
private ResourceUrlProvider urlProvider;

@PostMapping("/upload/{id}")
public Mono<String> handleFileUpload(@PathVariable Long id, @RequestParam("file") FilePart filePart) {
    // 将文件保存到服务器上
    File tempFile = reactorResourceFactory.getResource("file:" + urlProvider.getUploadPath() + "/temp/" + filePart.filename())
            .getFile();
    Mono<Void> mono = filePart.transferTo(tempFile);
    mono.block();

    // 处理上传的文件,例如将其保存到数据库中
    return Mono.just("Upload Success");
}

九、Spring Boot文档选取

Spring Boot官方文档中提供了很多有用的内容,包括文件上传等方面的内容: