2020-11-21 乐帮网
vuejs
在开发中导出Excel是一个很常见也很简单的功能,通过vue脚手架实现这个功能在网上也有好多教程,大部分写的都没有问题,我只简单的总结下:
  axios({
        method: 'GET',
        url: '/api',
        params: params,
        responseType: 'blob'
      }).then(res=>{
        let blob = new Blob([res.data], {type: "application/vnd.ms-excel"});
        let url = window.URL.createObjectURL(blob);
        window.location.href = url;
      }).catch(err=>{
        console.log(err)
      })
后台是通过C#提供的API实现的,就简单的返回一个数据流如下:
以下是后台的写法:
[HttpPost]
        public HttpResponseMessage ExportFile()
        {
	string filePath =@"D:\demo.xls";
var stream = new MemoryStream(File.ReadAllBytes(filePath));
            var resp = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content =  new StreamContent(stream)
        };
            resp.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel");
            resp.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8),
                DispositionType = "UTF-8"
            };
         
            return resp;
}
在经过数次尝试后得到如下结果:

这个问题困扰了好长一段时间,几经尝试也无法解决不了,最后经过仔细比对发现后台传过来的值到前端后发生了变化,通过排查发现竟是mock.js引起的,它把所有的请求和响应,注意是所有的,不管符合不符合规则都拦截重新写了,这个本来就是为了测试才引入的,所以把它去掉就可以了。
去掉mock可以参考这里:https://lebang2020.cn/details/201121yzknaesk.html
相关文章:Vue axios 下载文件
                        
                                关注我的微信公众号
                                在公众号里留言交流
                                投稿邮箱:1052839972@qq.com
                            
                        庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
                        雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。
                        
                    
                        
                                如果感觉对您有帮助
                                欢迎向作者提供捐赠
                                这将是创作的最大动力