HTSLH 2019-07-12 09:16 采纳率: 0%
浏览 626
已采纳

最近在用anjular post请求导出excel遇到的一些问题

以往做过直接导出数据,和上传excel,
用的poi3.17,前端框架用的angular
之前在导出时,都可以生成我预设的文件名,文件格式与后缀的excel
之前导出使用的是这样的

window.location.href = "/api/livecoursepay?courseName=" + $scope.courseName + "&types=" + 14;

赋现在的post传值代码

$scope.uploadlineGuangdian=function(){
        var fd = new FormData();
        fd.append("file", $("#file")[0].files[0]);
        fd.append("types",1);


        $http.post("/api/improtExcel/guangdian",fd,{
            withCredentials: true,
            headers: {'Content-Type': undefined },
            responseType: 'arraybuffer',
            transformRequest: angular.identity
        })
        .success(function(data){
            var blob = new Blob([data], {type: "application/vnd.ms-excel"});
            var objectUrl = URL.createObjectURL(blob);
            window.open(objectUrl);
        })
    }

但本次需求变更,需要导入一个excel文件,在返回一个excel文件,
所以只能用 post请求,但是使用过程中出现一些问题,
内容,表格名称都是我想要的样子,但是excel文件名和文件格式变成了奇怪的东西,
我需要用excel表格形式打开,再用excel另存才能达到我想要的样子
图片说明图片说明

用window.location.href走的话在页面下载的就是excel文件而且文件名是我设置好的文件名
但是用上面的post方法返回的是一个没有后缀名的,文件名是一排随机编码的文件,需要用excel打开(如上图),但是打开后数据是我想要的

所以我想问问大神为什么会出现这种情况,怎么解决,非常感谢

  • 写回答

2条回答 默认 最新

  • HTSLH 2019-07-12 14:40
    关注

    将success内替换成这样,问题解决,但原理还需要研究

    var blob = new Blob([data], {type: "application/vnd.ms-excel"});
    
                let fileName = '证书信息.xls';
    
                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);
    
                loading.close(); 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 angular项目错误
  • ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件