zoukankan      html  css  js  c++  java
  • 前端如何根据后端返回文件流下载

    前端实现下载excel、img、zip....方法有两种

        1. 直接调接口进行下载 后端进行处理                        多GET请求

        2. 调取接口返回对应的文件流,前端进行处理           多POST请求

    (1) zip下载:(未对IE浏览器做处理)

     1         let dataStr = `taskId=${this.taskVal}&versionNo=${this.versionVal}&flag=${this.flagVal}`;
     2         axios.get("/dq/task/record/detail/excel/exportDetail2?" + dataStr, {
     3           responseType: 'blob'  // zip文件流需要添加,不然文件无法打开
     4         }).then(res => {
     5            let Res = new ResDatas({
     6             res,
     7           }).init();
     8           let contentType = res.headers['content-type'];
     9           let contentDisposition = res.headers['content-disposition'];
    10           if(contentType.indexOf('application/json') != -1) {
    11             this.$message({
    12               message: Res,
    13               type: "warning"
    14             });
    15           } else {
    16             contentDisposition = contentDisposition.split(";")[1];
    17             let filename = contentDisposition.split("=")[1];
    18             let filenameStr = window.decodeURI(filename.split(",")[0],"utf-8"); // 下载的文件名称
    19             _customDownLoadZipGet(res.data, filenameStr);
    20           }
    21         })
     1 /**
     2  * @name: 
     3  * @param {type} 
     4  * @return: 
     5  * @description: (前端)文件流转换
     6  */
     7  export const _customDownLoadZipGet = (data, fileName) => {
     8   const blob = new Blob([data]);
     9   const downloadElement = document.createElement("a");
    10   const href = window.URL.createObjectURL(blob);
    11   //后台再header中传文件名
    12   downloadElement.href = href;
    13   downloadElement.download = fileName;
    14   document.body.appendChild(downloadElement);
    15   downloadElement.click();
    16   document.body.removeChild(downloadElement); // 下载完成移除元素
    17   window.URL.revokeObjectURL(href); // 释放掉blob对象
    18 };

    Blod转  =>  JSON

    1             let reader = new FileReader(); // 创建读取文件对象
    2             reader.addEventListener("loadend", () => {
    3               let Res = JSON.parse(reader.result); // 返回的数据
    4               this.$message({
    5                 message: Res.data,
    6                 type: Res.code == "200" ? "success" : "warning"
    7               });
    8             });
    9             reader.readAsText(res.data, 'utf-8'); // 设置读取的数据以及返回的数据类型为utf-8
  • 相关阅读:
    Win7+IIS伪静态 UrlRewriter配置
    让VS2010打包工具找回丢失的.net 2.0 .
    高效注册DLL控件 让你的IE浏览器复活
    查询及删除重复记录的方法
    .NET代码模板生成工具CodeSmith 5.0.1 专业版完美版下载
    如何使用CslaGen生成CSLA DAL层代码
    用C# + WebBrowser控件抓取AJAX页面的内容[转]
    了解IIS6应用程序池假死问题解决办法
    美化界面2
    C# WebBrowser高级应用
  • 原文地址:https://www.cnblogs.com/PengZhao-Mr/p/14631639.html
Copyright © 2011-2022 走看看