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
庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。
如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力