【REACT】node环境下axios异步下载文件

随手一记,仅做参考

环境:

zxdeMacBook-Pro:jvc zhangxu$ node -v
v12.16.3
zxdeMacBook-Pro:jvc zhangxu$ npm -v
6.14.4

下载请求:

    axios({ // 用axios发送post请求
          method: 'post',
          url: '/report/download/req', // 请求地址
          data: params, // 参数
          responseType: 'blob', // 表明返回服务器返回的数据类型
        })
          .then((res2) => { // 处理返回的文件流
            const content = res2.data;
            const blob = new Blob([content]);
            if ('download' in document.createElement('a')) { // 非IE下载
              const elink = document.createElement('a');
              elink.download = fileName;
              elink.style.display = 'none';
              elink.href = URL.createObjectURL(blob);
              document.body.appendChild(elink);
              elink.click();
              URL.revokeObjectURL(elink.href); // 释放URL 对象
              document.body.removeChild(elink);
            } else { // IE10+下载
              navigator.msSaveBlob(blob, fileName);
            }
          });
      });

后台接口:

 private static final String ATTACHMENT = "attachment";
 private static final String SHEET_NAME="Sheet1";
 private static final String FILE_NAME="OutPutFile.xlsx";
 private static final String FILE_PATH = File.separator+"Users"+File.separator+"已存在文件夹名"+File.separator;

    /**
     * 选中指定数据进行下载的接口
     */
    @PostMapping("/download")
    public ResponseEntity<byte[]> download(@RequestBody ExportParams exportParams) {

        //1、参数校验
        。。。

        String expPath = FILE_PATH+FILE_NAME;
        //目录不存在则创建目录
        boolean createResult = createDir(FILE_PATH);
        if(!createResult){
            throw new BizException("下载失败,错误信息:文件目录创建失败");
        }
        //2、生成文件File至expPath
        //3、文件名覆盖导出
        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            headers.setContentDispositionFormData(ATTACHMENT, FILE_NAME);
            File file = new File(expPath);
            return new ResponseEntity<>(FileUtils.readFileToByteArray(file),
                headers, HttpStatus.CREATED);
        } catch (Exception e) {
            log.error("downloadTemplate() failed",e);
            throw new BizException("下载失败,错误信息:"+e.getMessage());
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值