文件上传
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @Slf4j @RestController @RequestMapping("/file") public class FileController {
@PostMapping public FileInfo upload(MultipartFile file) throws IOException { System.out.println(file.getName()); System.out.println(file.getOriginalFilename()); System.out.println(file.getSize());
File localFile=new File(folder,System.currentTimeMillis()+".txt"); file.transferTo(localFile); return new FileInfo(localFile.getAbsolutePath()); } }
|
一般情况下,上传的文件不会存放在本地,因此可以将file.transferTo()改成file.getInputStream(),获取文件流,然后写入其他地方中,如OSS中。
对上传的文件进行一些配置:
1 2 3 4 5 6
| spring.servlet.multipart.enabled=true # 是否支持 multipart 上传文件 spring.servlet.multipart.file-size-threshold=0 # 支持文件写入磁盘 spring.servlet.multipart.location= # 上传文件的临时目录 spring.servlet.multipart.max-file-size=10Mb # 最大支持文件大小 spring.servlet.multipart.max-request-size=10Mb # 最大支持请求大小 spring.servlet.multipart.resolve-lazily=false # 是否支持 multipart 上传文件时懒加载
|
如果不限制大小,则设置为-1即可
1 2
| spring.servlet.multipart.maxFileSize=-1 spring.servlet.multipart.maxRequestSize=-1
|
文件下载
以下方法是通过浏览器直接下载。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @Slf4j @RestController @RequestMapping("/file") public class FileController {
@GetMapping("/{id}") public void download(@PathVariable String id, HttpServletRequest request, HttpServletResponse response) throws IOException {
try (InputStream inputStream=new FileInputStream(new File(folder,id+".txt")); OutputStream outputStream=response.getOutputStream();){ response.setContentType("application/x-download"); response.addHeader("Content-Disposition","attachment;filename=test.txt");
IOUtils.copy(inputStream,outputStream); outputStream.flush(); }
} }
|