美文网首页
前端导出后台文件流

前端导出后台文件流

作者: 怦然心动_a40c | 来源:发表于2021-07-29 15:56 被阅读0次

项目需求:实现文件下载的功能,也即是:获取数据流,记录一下

配置要点 responseType: 'blob', //请求入参的需要配置

umi-request 获取文件流 参考地址

import React from 'react';
import { Button } from 'antd';
import 'antd/dist/antd.css';
import request from 'umi-request';

export default () => {
  function download() {
    request('/get-data-stream', {
      method: 'POST',
      // 重要
      responseType: 'blob', //请求入参的需要配置 要点
    }).then(res => {
      const blob = new Blob([res]);
      const objectURL = URL.createObjectURL(blob);
      let btn = document.createElement('a');
      btn.download = '文件.docx';
      btn.href = objectURL;
      btn.click();
      URL.revokeObjectURL(objectURL);
      btn = null;
    });
  }
  return (
    <>
      <Button type="primary" onClick={download}>
        下载文件
      </Button>
    </>
  );
};

axios获取文件流 ,个别有的需要放到错误处理中实现,可以做区分处理 参考地址

         let that = this
          axios.get({
           url: 'xxxxxx',
            method: 'get',
            data:{},
            responseType: 'blob', // 后台返回的数据会被强制转为blob类型
          }).then(res => {
            let reader = new FileReader();
             reader.readAsText(res)
             reader.onload = function (result) {
             try {
                // 正常数据处理
               let resData = JSON.parse(result.target.result);  // 解析对象成功,说明是json数据
               if (resData.code) {
                 that.$message({
                  type: 'error',
                   message: resData.desc
                })
             }
            } catch (err) {   
              // 解析成对象失败,说明是该请求是 文件流
               let blob = new Blob([res], {type: "application/vnd.ms-excel"});
               var link = document.createElement('a');
               link.href = window.URL.createObjectURL(blob);
              link.download = `文件名.xls`;
               link.click()
             }
          };
         })

响应头获取文件流 【个人项目】

request.interceptors.response.use(async (response: any) => {
  hide();
  try {
  // 处理正常数据
  } catch (error) {
    //放到错误 处理中。导出数据列表
    const data = await response
    const datas = await data.blob()
    if (data.status === 200 && data.statusText === 'OK') {
      if (datas.size) {
        const blob = new Blob([datas]);
        const objectURL = URL.createObjectURL(blob);
        let btn = document.createElement('a');
        btn.download = '设备列表.csv';
        btn.href = objectURL;
        btn.click();
        URL.revokeObjectURL(objectURL);
        btn = null;
        return new Promise((resolve) => {
          resolve(true)
        })
      }
    }
  }
});

还有的设置responseType:'blob'无效问题 ,参考这个responseType:'blob'无效处理

相关文章

  • 前端导出后台文件流

    项目需求:实现文件下载的功能,也即是:获取数据流,记录一下 配置要点 responseType: 'blob', ...

  • vue导出excel文件

    向后台传递不同的参数值,后台查询出符合条件的数据,以文件流的格式返回前端,前端再导出为Excel。如果像普通的方式...

  • vue导出+导入功能

    导出 我这边的需求是后台返回了文件流由前端导出首先需要安装 此外,如果要安装 Typscript 声明,可以这样做...

  • 前端导出功能实现

    前端导出,不需要调用后台接口后台导出,前端直接实现导出功能 导出table数据 js 引入 importFile...

  • 关于二进制文件流导出excel前端处理

    无论是前端用插件导出还是后端返回url导出,总有不尽人意的地方,最后的解决方案是后端生成文件流导出,下面是文件流导...

  • 前端导出文件流

  • 前端导出xlsx二进制文件流

    背景: vue项目、需要点击导出、向后台发起请求、查询到对该用户的数据、返回二进制文件流、导出为xlsx文件。1、...

  • Web下载文件(导出)

    MVC 实现将数据库的内容(查询结果导出) 1 (以流的形式返回给前端,导出文件),文件内容是动态查询生成的 1....

  • 前端js将文件流导出为csv/excel文件

    前端将文件流导出为csv/excel文件有两种方式:1.后端直接返回文件连接:前端正常请求,后端返回一个静态文件链...

  • 前端保存二进制文件流返回excel-利用隐藏表单

    前言:前端导出excel,之前一直是后端返回文件一个链接(直接下载)。这次excel导出采用后端返回二进制流,前端...

网友评论

      本文标题:前端导出后台文件流

      本文链接:https://www.haomeiwen.com/subject/rdtfvltx.html