SpringBoot上传文件

来源:互联网 发布:数据运营知乎 编辑:程序博客网 时间:2024/09/21 08:57

Spring官方文档教程
Github完整项目传送门

编写Maven配置文件,添加依赖

最后一个依赖是解析HTML文件,官方文档里好像没添加这个依赖,但是不添加的话会报错

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com</groupId>  <artifactId>SpringBootUploadFile</artifactId>  <packaging>war</packaging>  <version>1.0-SNAPSHOT</version>  <name>SpringBootUploadFile Maven Webapp</name>  <url>http://maven.apache.org</url>  <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.2.RELEASE</version>  </parent>  <properties>    <java.version>1.8</java.version>  </properties>  <dependencies>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-thymeleaf</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-test</artifactId>      <scope>test</scope>    </dependency>    <dependency>      <groupId>net.sourceforge.nekohtml</groupId>      <artifactId>nekohtml</artifactId>      <version>1.9.22</version>    </dependency>  </dependencies>  <build>    <plugins>      <plugin>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-maven-plugin</artifactId>      </plugin>    </plugins>  </build></project>

Controller类

package hello;import hello.storage.StorageFileNotFoundException;import hello.storage.StorageService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.core.io.Resource;import org.springframework.http.HttpHeaders;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder;import org.springframework.web.servlet.mvc.support.RedirectAttributes;import java.io.IOException;import java.util.stream.Collectors;/** * Created by abb on 17-5-17. */@Controllerpublic class FileUploadController {    private final StorageService storageService;    @Autowired    public FileUploadController(StorageService storageService) {        this.storageService = storageService;    }    @GetMapping("/")    public String listUploadedFiles(Model model) throws IOException{        model.addAttribute("files",storageService                .loadAll()                .map(path -> MvcUriComponentsBuilder                            .fromMethodName(FileUploadController.class,"serveFile",path.getFileName().toString())                            .build().toString())                .collect(Collectors.toList()));        return "uploadForm";    }    @GetMapping("/files/{filename:.+}")    @ResponseBody    public ResponseEntity<Resource> serveFile(@PathVariable String filename){        Resource file = storageService.loadAsResource(filename);        return ResponseEntity                .ok()                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=\""+file.getFilename() + "\"")                .body(file);    }    @PostMapping("/")    public String handelFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes){        storageService.store(file);        redirectAttributes.addFlashAttribute("message", " you successfully uploaded " + file.getOriginalFilename() + "!");        return "redirect:/";    }    @ExceptionHandler(StorageFileNotFoundException.class)    public ResponseEntity handleStorageFileNotFound(StorageFileNotFoundException exception){        return ResponseEntity.notFound().build();    }}

Application类

package hello;import hello.storage.StorageProperties;import hello.storage.StorageService;import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Bean;/** * Created by abb on 17-5-17. */@SpringBootApplication@EnableConfigurationProperties(StorageProperties.class)public class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class,args);    }    @Bean    CommandLineRunner init(StorageService storageService){        return (args) ->{            storageService.deleteAll();            storageService.init();        };    }}

application.properties即配置文件,设置上传文件最大大小等

文件路径:/src/main/resources/

spring.http.multipart.max-file-size=128KBspring.http.multipart.max-request-size=128KBspring.thymeleaf.mode=LEGACYHTML5

html页面

文件路径:/src/main/resources/templates/

<!DOCTYPE html><html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><div th:if="${message}">    <h2 th:text="${message}"/></div>    <div>        <form method="POST" enctype="multipart/form-data" action="/">            <table>                <tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr>                <tr><td></td><td><input type="submit" value="Upload" /></td></tr>            </table>        </form>    </div>    <div>        <ul>            <li th:each="file : ${files}">                <a th:href="${file}" th:text="${file}" />            </li>        </ul>    </div></body></html>

页面效果

这里写图片描述

原创粉丝点击