文件的下载

1.超链接

<ul>
    <li>
      <%--浏览器 可以打开图片文件的 ,直接显示 没有下载--%>
      <a href="/mvc/imgs/a1.jpg">图片</a>
    </li>
    <li>
      <a href="/mvc/imgs/test1.xlsx">excel</a>
    </li>
    <li>
      <a href="/mvc/imgs/test2.pdf">pdf</a>
    </li>
    <li>
      <a href="/mvc/imgs/test3.rar">压缩包</a>
    </li>
    <li>
      <a href="/mvc/imgs/test4.docx">word</a>
    </li>
  </ul>

2.流下载

方式1

@GetMapping("/download")
    public ResponseEntity<byte[]> download1(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException {
        //获取真实路径
        //获取 文件存储的路径
        String realPath = request.getServletContext().getRealPath("/imgs/");
        //下载的文件的全路径
        String allPath = realPath + filename;
        FileInputStream inputStream = new FileInputStream(allPath);
        //获取流数组
        byte[] bytes = new byte[inputStream.available()];
 		//读取流
        inputStream.read(bytes);
        //设置下载的文件名
        String newFileName = RandomUtil.getFileName(filename);
        //设置头信息
        HttpHeaders headers = new HttpHeaders();
        headers.setContentDispositionFormData("attachment", URLEncoder.encode(newFileName,"utf-8"));
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes,headers, HttpStatus.OK);
        return responseEntity;

    }

方式2

 @GetMapping("/download2")
    public void download2(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException {
        //获取 文件存储的路径
        String realPath = request.getServletContext().getRealPath("/imgs/");
        //下载的文件的全路径
        String allPath = realPath + filename;
        //获取流信息
        try(FileInputStream fileInputStream = new FileInputStream(allPath)){
            //设置 响应的头信息 分号不能错
            response.setHeader("content-disposition","attachment;filename="+RandomUtil.getFileName(filename));
            //写给客户端
            //把 fileInputStream的流信息 复制给 response的输出流
            //只要把流的信息  给 response.getOutputStream()  就会触发浏览器的下载
            IOUtils.copy(fileInputStream,response.getOutputStream());
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值