程序员从入门到放弃

spring boot 三两行代码实现文件的上传和下载

2020-08-10  本文已影响0人  虾游于海

本示例记录Spring Boot 2.x中文件的上传,整个上传逻辑只有两三行代码。

一、文件的上传

@RequestMapping("files")
@RestController
public class FileController {

    // 确定存储文件的目录
    private String path = "d:" + File.separator + "uploader";

    @PostMapping
    public Map<String, Object> upload(@RequestParam("file") MultipartFile file)
            throws IllegalStateException, IOException {
        // 获取原始文件名
        String filename = file.getOriginalFilename();
        // 构建保存目标
        File target = new File(path + File.separator + filename);
        // 将文件转移到指定目录
        file.transferTo(target);
        // 构建响应
        Map<String, Object> response = new HashMap<>();
        response.put("target", target.getAbsolutePath());
        return response;
    }

    @PostConstruct
    public void initStorage() {
        File target = new File(path);
        if (!target.exists()) {
            if (target.mkdirs()) {
                System.out.println("文件存储目录创建成功。");
            } else {
                System.err.println("文件存储目录创建失败。");
            }
        }
    }
}

代码解析:
基于Restful风格构建的文件上传逻辑。文件上传的逻辑写在upload方法中。

spring:
  servlet:
    multipart:
      max-file-size: 200MB
      max-request-size: 200MB

二、文件的下载

继续在controller中添加下载代码逻辑

    @GetMapping("{filename}")
    public ResponseEntity<InputStreamSource> download(@PathVariable("filename") String filename) {
        // 构建下载路径
        File target = new File(path + File.separator + filename);
        // 构建响应体
        if (target.exists()) {
            FileSystemResource resource = new FileSystemResource(target);
            return ResponseEntity.ok()
                    // 指定文件的contentType
                    .contentType(MediaType.APPLICATION_OCTET_STREAM)
                    .body(resource);
        } else {
            // 如果文件不存在,返回404响应
            return ResponseEntity.notFound().build();
        }
    }

代码解析:

小结

这应该是Spring boot中最简单的文件上传和下载功能了,而且从理论上来将,性能也是比较优秀的(利用了nio)。但功能还是相对简单。接下来还会实现文件的断点续传,视频的拖动播放等功能。
示例参考 https://github.com/ldwqh0/file-uploader.git

上一篇下一篇

猜你喜欢

热点阅读