玖叶教程网

前端编程开发入门

Springboot (十八) 文件处理(springboot 文件存储)

在本章中,将学习如何使用Web服务上载和下载文件。

上传文件

对于上载文件,要将MultipartFile用作请求参数,此API应使用多部分表单数据值。 观察下面给出的代码 -

@RequestMapping(value = "/upload", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String fileUpload(@RequestParam("file") MultipartFile file) {
 return null;
}
Java

下面给出了相同的完整代码 -

package com.felix.demo.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
public class FileUploadController {
 @RequestMapping(value = "/upload", method = RequestMethod.POST, 
 consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
 public String fileUpload(@RequestParam("file") MultipartFile file) throws IOException {
 File convertFile = new File("/var/tmp/"+file.getOriginalFilename());
 convertFile.createNewFile();
 FileOutputStream fout = new FileOutputStream(convertFile);
 fout.write(file.getBytes());
 fout.close();
 return "File is upload successfully";
 }
}

文件下载

对于文件下载,应该使用InputStreamResource下载文件。需要在Response中设置HttpHeader Content-Disposition,并且需要指定应用程序的响应Media Type。

注 - 在以下示例中,文件应在运行应用程序的指定路径上可用。
@RequestMapping(value = "/download", method = RequestMethod.GET) 
public ResponseEntity<Object> downloadFile() throws IOException {
 String filename = "/var/tmp/mysql.png";
 File file = new File(filename);
 InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
 HttpHeaders headers = new HttpHeaders();
 headers.add("Content-Disposition", String.format("attachment; filename=\\"%s\\"", file.getName()));
 headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
 headers.add("Pragma", "no-cache");
 headers.add("Expires", "0");
 ResponseEntity<Object> 
 responseEntity = ResponseEntity.ok().headers(headers).contentLength(file.length()).contentType(
 MediaType.parseMediaType("application/txt")).body(resource);
 return responseEntity;
}

下面给出了相同的完整代码 -

package com.felix.demo.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FileDownloadController {
 @RequestMapping(value = "/download", method = RequestMethod.GET) 
 public ResponseEntity<Object> downloadFile() throws IOException {
 String filename = "/var/tmp/mysql.png";
 File file = new File(filename);
 InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
 HttpHeaders headers = new HttpHeaders();
 headers.add("Content-Disposition", String.format("attachment; filename=\\"%s\\"", file.getName()));
 headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
 headers.add("Pragma", "no-cache");
 headers.add("Expires", "0");
 ResponseEntity<Object> 
 responseEntity = ResponseEntity.ok().headers(headers).contentLength(
 file.length()).contentType(MediaType.parseMediaType("application/txt")).body(resource);
 return responseEntity;
 }
}

主要的Spring Boot应用程序如下 -

package com.felix.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
 public static void main(String[] args) {
 SpringApplication.run(DemoApplication.class, args);
 }
}

Maven构建文件 - pom.xml 的代码如下 -

<?xml version = "1.0" encoding = "UTF-8"?>
<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/xsd/maven-4.0.0.xsd"> 
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.felix</groupId>
 <artifactId>demo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
 <name>demo</name>
 <description>Demo project for Spring Boot</description>
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.5.8.RELEASE</version>
 <relativePath/> 
 </parent>
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 </properties>
 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 </dependencies>
 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
 </build>
</project>

Gradle构建文件 - 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.felix'
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')
}

现在创建一个可执行的JAR文件,并使用下面给出的Maven或Gradle命令运行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,可以看到如下所示的输出 -

文件上传 - http://localhost:8080/upload

文件下载 - http://localhost:8080/download

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言