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 (
            InputStream is = this.getClass().getResourceAsStream(filePath);
            OutputStream os = response.getOutputStream();
    ) {
        byte[] bytes = StreamUtils.copyToByteArray(is);
        response.reset();
        response.setContentType("application/octet-stream");
        response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
        response.addHeader("Content-Length", "" + bytes.length);
        os.write(bytes);
        os.flush();
        return "";
    } catch (Exception e) {
        e.printStackTrace();
        return "文件下载出错";
    }
}

filePath是在服务器上要被下载的文件的路径,通过这个路径获取一个输入流用于读取文件内容

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

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


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍

不锈钢拖把挂钩挂架粘钩免打孔卫生间置物架浴室扫把拖布夹强力排钩 灰色3夹4钩 免打孔/打孔两用
¥23.00
金隆兴 【540枚63*37mm】不干胶标签贴纸姓名贴自粘性口取纸标贴 9枚/张 7271-1蓝色
¥8.60
大林和小林(彩插版)全本无删减 中小学课外阅读推荐 无障碍阅读
¥19.26
名流超薄避孕套小号 男用紧绷安全套成人计生用品房事 薄如羽翼12只装
¥8.80
曼秀雷敦(Mentholatum) 曼秀雷敦 高保湿润唇膏滋润修护防干裂锁水软化角质唇妆打底4.5g 薄荷味
¥28.50
胜为(shengwei)硬盘线 高速SATA线3.0硬盘数据线直头/弯头连接线 双通道屏蔽硬盘转接线 直对直-黑色 1米
¥8.80
新版剑桥KET考试.语法必备【2020年新版考试】剑桥通用五级考试A2 Key for Schools
¥33.12
植物大战僵尸2奇妙时空之旅·酷拼插:恐龙危机大救援 新版
¥35.80