009 spring boot中文件的上传与下载

Posted 曹军

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了009 spring boot中文件的上传与下载相关的知识,希望对你有一定的参考价值。

一:任务

1.任务

  文件的上传

  文件的下载

 

二:文件的上传

1.新建一个对象

  FileInfo.java

 1 package com.cao.dto;
 2 
 3 public class FileInfo {
 4     private String path;
 5     public FileInfo(String path) {
 6         this.path=path;
 7     }
 8     public String getPath() {
 9         return path;
10     }
11     public void setPath(String path) {
12         this.path = path;
13     }
14     
15 }

 

2.新建控制器

 1 package com.cao.web.controller;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 import java.util.Date;
 6 
 7 import org.springframework.web.bind.annotation.PostMapping;
 8 import org.springframework.web.bind.annotation.RequestMapping;
 9 import org.springframework.web.bind.annotation.RestController;
10 import org.springframework.web.multipart.MultipartFile;
11 
12 import com.cao.dto.FileInfo;
13 
14 @RestController
15 @RequestMapping("/file")
16 public class FileController {
17     @PostMapping
18     public FileInfo uploadFile(MultipartFile fileKey) throws Exception {
19         System.out.println("fileName: "+fileKey.getName());
20         System.out.println("OriginalFilename: "+fileKey.getOriginalFilename());
21         System.out.println("size: "+fileKey.getSize());
22         //将要存储在controller的目录下
23         String folder="E:\\\\workspace-sts-3.9.5.RELEASE\\\\it-security-demo\\\\src\\\\main\\\\java\\\\com\\\\cao\\\\web\\\\controller";
24         File localFile=new File(folder,new Date().getTime()+".txt");
25         fileKey.transferTo(localFile);
26         //写入流中,这个主要用于写入其他的地方,例如服务器等,这里不写了
27         //fileKey.getInputStream()
28         return new FileInfo(localFile.getAbsolutePath());
29     }
30 }

 

3.测试类

 1 /**
 2      * 测试文件的上传
 3      * @throws Exception 
 4      */
 5     @Test
 6     public void whenUploadSuccess() throws Exception {
 7         String result=mockMvc.perform(MockMvcRequestBuilders.fileUpload("/file")
 8                 .file(new MockMultipartFile("fileKey","test.txt","multipart/form-data","hello".getBytes("UTF-8"))))
 9                 .andExpect(MockMvcResultMatchers.status().isOk())
10                 .andReturn().getResponse().getContentAsString();
11         System.out.println("result="+result);
12     }

 

4.控制台

  

  存储到的现象

  

 

三:文件的下载

1.添加io操作的包

1           <dependency>
2             <groupId>commons-io</groupId>
3             <artifactId>commons-io</artifactId>
4           </dependency>

 

2.文件下载的程序

 1 package com.cao.web.controller;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.OutputStream;
 8 import java.util.Date;
 9 
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 
13 import org.apache.commons.io.IOUtils;
14 import org.springframework.web.bind.annotation.GetMapping;
15 import org.springframework.web.bind.annotation.PathVariable;
16 import org.springframework.web.bind.annotation.PostMapping;
17 import org.springframework.web.bind.annotation.RequestMapping;
18 import org.springframework.web.bind.annotation.RestController;
19 import org.springframework.web.multipart.MultipartFile;
20 
21 import com.cao.dto.FileInfo;
22 
23 @RestController
24 @RequestMapping("/file")
25 public class FileController {
26     
27     String folder="E:\\\\workspace-sts-3.9.5.RELEASE\\\\it-security-demo\\\\src\\\\main\\\\java\\\\com\\\\cao\\\\web\\\\controller";
28 
29     /**
30      * 文件的上传控制器
31      * @param fileKey
32      * @return
33      * @throws Exception
34      */
35     @PostMapping
36     public FileInfo uploadFile(MultipartFile fileKey) throws Exception {
37         System.out.println("fileName: "+fileKey.getName());
38         System.out.println("OriginalFilename: "+fileKey.getOriginalFilename());
39         System.out.println("size: "+fileKey.getSize());
40         //将要存储在controller的目录下
41         File localFile=new File(folder,new Date().getTime()+".txt");
42         fileKey.transferTo(localFile);
43         //写入流中,这个主要用于写入其他的地方,例如服务器等,这里不写了
44         //fileKey.getInputStream()
45         return new FileInfo(localFile.getAbsolutePath());
46     }
47     
48     /**
49      * 文件的下载
50      */
51     @GetMapping("/{id}")
52     public void downFile(@PathVariable String id, HttpServletRequest request,HttpServletResponse response) {
53         try(
54             InputStream inputStream=new FileInputStream(new File(folder,id+".txt"));
55             OutputStream outputStream=response.getOutputStream();    
56             ) 
57         {
58             response.setContentType("application/x-download");
59             response.addHeader("Content-Disposition", "attachment;filename=test.txt");
60             IOUtils.copy(inputStream, outputStream);
61             outputStream.flush();
62         } catch (Exception e) {
63             // TODO: handle exception
64         }
65     }
66     
67     
68 }

 

3.在浏览器上访问

  

 

以上是关于009 spring boot中文件的上传与下载的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 2.x 实现文件上传与下载

吴裕雄--天生自然--Spring Boot--Spring Boot文件上传与下载

Spring Boot入门——文件上传与下载

android+spring boot 选择,上传,下载文件

spring boot实现文件上传下载

Spring Boot关于上传文件例子的剖析