Skip to content

springboot 文件下载

假如我要下载项目钟 resources/static/template 下的文件。

java
@RestController
public class DownloadController {

    @GetMapping("/download/template/{fileName}")
    public void download(@PathVariable String fileName, HttpServletResponse response) {

        // 获取文件路径
        String filePath = "static/template/" + fileName;
        // 获取文件 resource
        ClassPathResource resource = new ClassPathResource(filePath);
        // 确认文件是否存在
        if (!resource.exists()) {
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
            return;
        }

        // 文件传输
        try (InputStream in = resource.getInputStream();
             OutputStream out = response.getOutputStream()) {

            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));

            byte[] buffer = new byte[1024];
            int len;
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }

        } catch (Exception e) {
            e.printStackTrace();
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
    }
}