当前位置: 首页 > Web前端 > vue.js

使用Blob下载文件流

时间:2023-03-31 17:34:53 vue.js

需求:请求后台接口下载文件。成功则直接获取文件流下载,不获取路径。创建一个blob对象语法:varBlobData=newBlob(array,options);参数:数组:数组形式的参数。官方概念:由ArrayBuffer、ArrayBufferView、Blob、DOMString等对象组成的Array,或者其他类似对象的混合,都会被放入一个Blob中。DOMStrings将被编码为UTF-8。options:对象形式的参数。官方概念:是一个可选的BlobPropertyBag字典。有两个属性,type,默认值为"",放入blob的数组内容的MIME类型。endings,默认值为“transparent”,用于指定包含行终止符\n的字符串如何书写。创建实例:varblob=newBlob([data],{type:'charset=utf-8'})//data一般为后台返回的数组结果。vue+elementUIpost请求下载模板下面的代码可以直接复制使用,其中“传给后台的数据”、“url”和下载文件的“文件名”需要替换。downLoad(){//调用方法//创建加载框//注意:如果文件过大,点击下载后页面会短时间无响应。建议创建一个加载框以提高交互效果。constloading=this.$loading({//elementUIlock:true,text:'Pullfile',spinner:'el-icon-loading',background:'rgba(0,0,0,0.7)'})//创建需要传输的数据,这里使用Fromdata格式,需要根据项目情况修改。varfileData=newFormData()fileData.append('id',id)axios({//注意页面必须引入axios方法:'post',//请求方法url:'http://*****',//请求地址data:fileData,//传输数据responseType:'blob'//数据格式}).then(res=>{varblob=newBlob([res.data],{type:'charset=utf-8'})vardownloadElement=document.createElement('a')varhref=window.URL.createObjectURL(blob)//创建链接downloadElement.href=href//标签赋值downloadElement.download='filename'+'.pdf'//文件类型document.body.appendChild(downloadElement)//给页面添加一个标签downloadElement.click()//执行一个标签点击效果document.body.removeChild(downloadElement)//移除一个标签window.URL.revokeObjectURL(href)//释放URL对象loading.close()//关闭加载框})//下载结果捆}