SpringMVC或SpringBoot下载文件方法

在Controller的方法中调用下面的方法,实现文件下载。
有两种需求:

  1. 要下载的文件与服务在同一个服务器上,可通过文件路径创建File对象,下载文件;
  2. 要下载的文件与服务在不同一个服务器上,可在服务程序中从文件服务器下载文件,转为byte数组,再调用该方法;
/**
 * 在Controller的方法中调用此方法,实现文件下载
 * @param resp 
 * @param fileBytes 文件的byte数组
 * @param fileName
 * @throws IOException
 */
private void downloadFile(HttpServletResponse resp, byte[] fileBytes, String fileName) throws IOException {
    resp.setHeader("content-type", "application/octet-stream");
    resp.setContentType("application/octet-stream");
    resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
    byte[] buff = new byte[1024];
    BufferedInputStream bufferedInputStream = null;
    OutputStream outputStream = null;
    try {
        outputStream = resp.getOutputStream();
 // ————————————————————————————
 // 文件File对象转BufferedInputStream: 给方法传入文件路径和文件名
 // File file = new File(filePath, fileName);
 // FileInputStream fis = new FileInputStream(file);
 // bufferedInputStream = new BufferedInputStream(fis);
 // ————————————————————————————
        bufferedInputStream = new BufferedInputStream(new ByteArrayInputStream(fileBytes), fileBytes.length);
        int num = bufferedInputStream.read(buff);
        while (num != -1) {
            outputStream.write(buff, 0, num);
            outputStream.flush();
            num = bufferedInputStream.read(buff);
        }
    } catch (IOException e) {
        throw new RuntimeException(e.getMessage());
    } finally {
        if (bufferedInputStream != null) {
            bufferedInputStream.close();
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,032评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,220评论 30 472
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,983评论 0 15
  • 第一阶段:Denial 否认与隔绝 大多数患者无论是在一开始就被明确告知病情或是起初不明真相、随后意识到自己患有绝...
    周云浩阅读 1,274评论 0 2