前后端实现文件下载

$.ajax(
    {
      type: "POST",
      url: '/XXX/downloadDocument',
      xhrFields: {responseType: 'blob'},
      contentType: "application/json",
      success: function(result, status, xhr){
        // 根据后端设置头数据获取文件名
        const fileName = window.decodeURI(xhr.getResponseHeader("Content-disposition").split('=')[1], "UTF-8");
        // 可通过XMLHttpRequest对象,获取响应头
        console.log(xhr);
        // 浏览器兼容 参数Blob类型
        const downloadURL = (window.URL || window.webkitURL).createObjectURL(result);
        // 创建a标签
        var a = document.createElement('a');
        // 下载后文件的名字
        a.download = fileName;
        a.href = downloadURL;
        document.body.appendChild(a);
        a.click();
        
        setTimeout(function () {
                    // 移除内存中的临时文件路径和为下载而创建的a标签
                    URL.revokeObjectURL(downloadURL);
                    a.remove();
                }, 10000);
      }
    }
  )
File file = new File(docPath);
        if (!file.exists()) {
            return AjaxResult.error("请您输入正确的文件ID");
        }
        InputStream inputStream = null;
        BufferedInputStream bufferedInputStream = null;
        BufferedOutputStream bufferedOutputStream = null;
        try {
            response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
            response.addHeader("Content-Length", "" + file.length());
            response.setContentType("application/octet-stream");

            inputStream = new FileInputStream(file);
            bufferedInputStream = new BufferedInputStream(inputStream);
            bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
            IOUtils.copy(bufferedInputStream, bufferedOutputStream);
        } catch(Exception e){
            logger.error("下载文件异常",e);
            return AjaxResult.error("下载文件异常");
        } finally {
            try {
                if(null!=inputStream){
                    inputStream.close();
                }
                if(null!=bufferedInputStream){
                    bufferedInputStream.close();
                }
                if(null!=bufferedOutputStream){
                    bufferedOutputStream.flush();
                    bufferedOutputStream.close();
                }
            } catch (Exception e) {
                logger.error("档案管理停流异常",e);
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值