Spring Boot 教程:文件处理

本文学习如何使用 web 服务进行文件上传和下载。
文件上传
上传一个文件,可以使用 MultipartFile 作为请求参数,并且这个 API 应当消费 Multi-Part 表单数据值。示例代码如下:
1 @RequestMapping(value = "/upload", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) 2 3 public String fileUpload(@RequestParam("file") MultipartFile file) { 4 return null; 5 }
完整代码如下:
1 package com.tutorialspoint.demo.controller; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 import org.springframework.http.MediaType; 8 import org.springframework.web.bind.annotation.RequestMapping; 9 import org.springframework.web.bind.annotation.RequestMethod; 10 import org.springframework.web.bind.annotation.RequestParam; 11 import org.springframework.web.bind.annotation.RestController; 12 import org.springframework.web.multipart.MultipartFile; 13 14 @RestController 15 public class FileUploadController { 16 @RequestMapping(value = "/upload", method = RequestMethod.POST, 17 consumes = MediaType.MULTIPART_FORM_DATA_VALUE) 18 19 public String fileUpload(@RequestParam("file") MultipartFile file) throws IOException { 20 File convertFile = new File("/var/tmp/"+file.getOriginalFilename()); 21 convertFile.createNewFile(); 22 FileOutputStream fout = new FileOutputStream(convertFile); 23 fout.write(file.getBytes()); 24 fout.close(); 25 return "File is upload successfully"; 26 } 27 }
文件下载
文件下载应当使用 InputStreamResource。我们要在响应中设置 HttpHeader Content-Disposition,并且要指定应用的响应媒体类型(Media Type)。
注意: 以下面的例子中,在应用运行时指定路径上的文件应当是可用的。
1 @RequestMapping(value = "/download", method = RequestMethod.GET) 2 public ResponseEntity<Object> downloadFile() throws IOException { 3 String filename = "/var/tmp/mysql.png"; 4 File file = new File(filename); 5 InputStreamResource resource = new InputStreamResource(new FileInputStream(file)); 6 HttpHeaders headers = new HttpHeaders(); 7 8 headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getName())); 9 headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); 10 headers.add("Pragma", "no-cache"); 11 headers.add("Expires", "0"); 12 13 ResponseEntity<Object> 14 responseEntity = ResponseEntity.ok().headers(headers).contentLength(file.length()).contentType( 15 MediaType.parseMediaType("application/txt")).body(resource); 16 17 return responseEntity; 18 }
完整代码如下:
1 package com.tutorialspoint.demo.controller; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.IOException; 6 7 import org.springframework.core.io.InputStreamResource; 8 import org.springframework.http.HttpHeaders; 9 import org.springframework.http.MediaType; 10 import org.springframework.http.ResponseEntity; 11 import org.springframework.web.bind.annotation.RequestMapping; 12 import org.springframework.web.bind.annotation.RequestMethod; 13 import org.springframework.web.bind.annotation.RestController; 14 15 @RestController 16 public class FileDownloadController { 17 @RequestMapping(value = "/download", method = RequestMethod.GET) 18 public ResponseEntity<Object> downloadFile() throws IOException { 19 String filename = "/var/tmp/mysql.png"; 20 File file = new File(filename); 21 InputStreamResource resource = new InputStreamResource(new FileInputStream(file)); 22 HttpHeaders headers = new HttpHeaders(); 23 24 headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getName())); 25 headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); 26 headers.add("Pragma", "no-cache"); 27 headers.add("Expires", "0"); 28 29 ResponseEntity<Object> 30 responseEntity = ResponseEntity.ok().headers(headers).contentLength( 31 file.length()).contentType(MediaType.parseMediaType("application/txt")).body(resource); 32 33 return responseEntity; 34 } 35 }
主 Spring Boot 应用类如下:
1 package com.tutorialspoint.demo; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 6 @SpringBootApplication 7 public class DemoApplication { 8 public static void main(String[] args) { 9 SpringApplication.run(DemoApplication.class, args); 10 } 11 }
Maven build – pom.xml 代码如下:
1 <?xml version = "1.0" encoding = "UTF-8"?> 2 <project xmlns = "http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 5 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 6 7 <modelVersion>4.0.0</modelVersion> 8 <groupId>com.tutorialspoint</groupId> 9 <artifactId>demo</artifactId> 10 <version>0.0.1-SNAPSHOT</version> 11 <packaging>jar</packaging> 12 <name>demo</name> 13 <description>Demo project for Spring Boot</description> 14 15 <parent> 16 <groupId>org.springframework.boot</groupId> 17 <artifactId>spring-boot-starter-parent</artifactId> 18 <version>1.5.8.RELEASE</version> 19 <relativePath/> 20 </parent> 21 22 <properties> 23 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 24 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 25 <java.version>1.8</java.version> 26 </properties> 27 28 <dependencies> 29 <dependency> 30 <groupId>org.springframework.boot</groupId> 31 <artifactId>spring-boot-starter-web</artifactId> 32 </dependency> 33 34 <dependency> 35 <groupId>org.springframework.boot</groupId> 36 <artifactId>spring-boot-starter-test</artifactId> 37 <scope>test</scope> 38 </dependency> 39 </dependencies> 40 41 <build> 42 <plugins> 43 <plugin> 44 <groupId>org.springframework.boot</groupId> 45 <artifactId>spring-boot-maven-plugin</artifactId> 46 </plugin> 47 </plugins> 48 </build> 49 </project>
Gradle Build – build.gradle 代码如下:
buildscript { ext { springBootVersion = '1.5.8.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'org.springframework.boot' group = 'com.tutorialspoint' version = '0.0.1-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile('org.springframework.boot:spring-boot-starter-web') testCompile('org.springframework.boot:spring-boot-starter-test') }
现在你可以使用 Maven 或 Gradle 命令创建可执行 executable JAR 文件并运行 Spring Boot 应用了:
Maven 命令如下:
mvn clean install
在 “BUILD SUCCESS” 之后,你可以在 target 目录下找到 JAR 文件。
Gradle 可以使用以下命令:
gradle clean build
在 “BUILD SUCCESSFUL” 之后,你可以在 build/libs 目录下找到 JAR 文件。
现在,使用以下命令运行 JAR 文件:
java –jar <JARFILE>
应用将在 Tomcat 8080 端口启动,如下 所示:

现在在 POSTMAN 应用中输入以下 URL’s in POSTMAN,可以看到下图所示的输出:


浙公网安备 33010602011771号