SpringBoot如何实现文件下载功能

SpringBoot实现文件下载功能不需要什么额外的依赖,仅涉及到了java对文件流相关的操作。简单说操作流程就是:

加载文件 => 读取文件流 => 把文件流写入到HttpServletResponse中

Controller层代码如下:

@GetMapping("/download")
@ResponseBody
public String download(HttpServletRequest request, HttpServletResponse response) {
    //下载的文件路径
    String filePath = "/Users/liqingcan/Desktop/1.pdf";
    //下载后的文件名
    String fileName = "测试文件下载.pdf";

    //使用流的形式下载文件
    try {
        //加载文件
        File file = new File(filePath);
        InputStream is = new BufferedInputStream(new FileInputStream(file));
        byte[] buffer = new byte[is.available()];
        is.read(buffer);
        is.close();
        // 清空response
        response.reset();
        // 设置response的Header
        response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
        response.addHeader("Content-Length", "" +file.length());
        OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
        response.setContentType("application/octet-stream");
        toClient.write(buffer);
        toClient.flush();
        toClient.close();
        return "";
    } catch (Exception e) {
        e.printStackTrace();
        return "文件下载出错";
    }
}

filePath是在服务器上要被下载的文件的路径,通过这个路径实例化一个File对象用于读取文件到response流中

fileName是最终在浏览器上显示的文件名

使用response流输出文件来下载方法是可以不用有返回值的,但是我为了在下载的时候如果出现异常能进行提示,这里使用了String和@ResponseBody注解,在发生异常的时候可以输出错误信息到页面上


文章太有用啦👍,打赏个钢镚鼓励鼓励!!