[Java-文件上传与下载]SpringBoot2.x实现文件上传与下载

1,475 阅读1分钟

1. 配置pom,引入依赖包

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
 
    <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>

2.可以配置文件大小限制

spring:
  servlet:
    multipart:
      max-file-size: 5Mb
      max-request-size: 10Mb

3.控制器主要代码

@RestController
@RequestMapping(value = "/files")
public class FileManageController {
    /**
     * 文件上传
     *
     * @param file
     * @return
     */
    @PostMapping(value = "/upload")
    public String upload(@RequestParam("fileName") MultipartFile file) {
        if (file.isEmpty()) {
            return "请选择一个文上传";
        }
        String filename = file.getOriginalFilename();
        long fileSize = file.getSize();
        System.out.println("文件名称" + filename + "-------文件大小" + fileSize);
        String path = "F:/workspace/test/file/manage";
        File dest = new File(path + "/" + filename);
        if (!dest.getParentFile().exists()) {
            //父目录不存在就创建一个
            dest.getParentFile().mkdir();
        }
        //保存文件
        try {
            file.transferTo(dest);
            return "文件上传成功";
        } catch (IOException e) {
            e.printStackTrace();
            return "文件上传失败";
        }
    }
 
    /**
     * 文件下载
     *
     * @param response
     * @return
     */
    @GetMapping(value = "/download")
    public String download(HttpServletResponse response) {
        String fileName = "测试文件上传与下载.docx"; //文件名
        String filepath = "F:/workspace/test/file/manage"; //要读取的文所在路径
        File file = new File(filepath + "/" + fileName);
        byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        OutputStream os = null;
        try {
            os = response.getOutputStream();
            bis = new BufferedInputStream(new FileInputStream(file));
            int i = bis.read(buff);
            while (i != -1) {
                os.write(buff, 0, buff.length);
                os.flush();
                i = bis.read(buff);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return "文件上传失败";
        } finally {
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return "文件上传成功";
    }
}

4.总结

至此,简单的文件上传和下载功能就已经实现了。

后续,将会提升功能完整性和灵活性。包括但不限于:

  1. 升级功能为以微服务形式向其他服务服务提供文件管理功能。
  2. 支持大文件上传和下载功能。
  3. 支持断点续传。