关于文件下载:Springboot实现文件下载功能

42次阅读

共计 1315 个字符,预计需要花费 4 分钟才能阅读完成。

应用 springboot 实现文件下载

本地文件下载 (须要文件的绝对路径)

步骤一封装文件下载 api 工具类:
@Slf4j
@Component
public class CommonDownLoadUtil {
    /**
 * @param response 客户端响应
 * @throws IOException io 异样
 */
 public void downLoad(HttpServletResponse response, String downloadUrl) throws Throwable {if (Objects.isNull(downloadUrl)) {
            // 如果接管参数为空则抛出异样,由全局异样解决类去解决。throw new NullPointerException("下载地址为空");
 }
        // 读文件
        File file = new File(downloadUrl);
        if (!file.exists()) {log.error("下载文件的地址不存在:{}", file.getPath());
            // 如果不存在则抛出异样,由全局异样解决类去解决。throw new HttpMediaTypeNotAcceptableException("文件不存在");
 }
        // 获取用户名
        String fileName = file.getName();
        // 重置 response
        response.reset();
        // ContentType,即通知客户端所发送的数据属于什么类型
        response.setContentType("application/octet-stream; charset=UTF-8");
        // 取得文件的长度
        response.setHeader("Content-Length", String.valueOf(file.length()));
        // 设置编码格局
        response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));
        // 发送给客户端的数据
        OutputStream outputStream = response.getOutputStream();
        byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        // 读取文件
        bis = new BufferedInputStream(new FileInputStream(new File(downloadUrl)));
        int i = bis.read(buff);
        // 只有能读到,则始终读取
        while (i != -1) {
            // 将文件写出
            outputStream.write(buff, 0, buff.length);
            // 刷出
            outputStream.flush();
            i = bis.read(buff);
        }
    }
}

备注:

  • 本文将工具类加了 @Component 交给 spring 治理了,当然,也能够将此办法应用静态方法封装。
  • 本文的全局异样解决,能够抉择 try->catch, 也能够应用全局异样解决类去解决 (全局异样具体看上文)。
  • 将工具类封装之后,则能够应用了,这里代码的调用,本文就不再叙述了。

正文完
 0