本文主要是介绍后端输出流文件时,浏览器不保存文件,不弹下载框,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
实践得知:通过ajax请求后端时,浏览器不会保存文件。因为ajax不支持返回二进制流。 我用的是axios也不行
解决方法:
//导出xxx(){console.log(this.data2)Vue.prototype.$axios({xhrFields: {withCredentials: false},method:'post',url: 你的apiurl,responseType: 'blob',//不加这个responseType时,下载的文件可能乱码data:this.data2}).then((res) =>{console.log(res)let blob = new Blob([res.data]);let downloadElement = document.createElement("a");let href = window.URL.createObjectURL(blob); //创建下载的链接downloadElement.href = href;downloadElement.download = 'report.zip'; //下载后文件名document.body.appendChild(downloadElement);downloadElement.click(); //点击下载document.body.removeChild(downloadElement); //下载完成移除元素window.URL.revokeObjectURL(href); //释放掉blob对象})},
这样就会把后端返回的流转换为blob 然后下载
具体这个“ responseType: ‘blob’ ”代表什么:
参考文献:http://www.axios-js.com/zh-cn/docs/index.html
表示服务器响应的数据类型,可以是 ‘arraybuffer’, ‘blob’, ‘document’, ‘json’, ‘text’, ‘stream’。
当然里面的东西,请大家自己参考实际当中自行修改。
参考链接:https://www.cnblogs.com/shangguancn/p/14789220.html
这篇关于后端输出流文件时,浏览器不保存文件,不弹下载框的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!