Vue - 调用接口获取文件数据流并根据类型预览 一、接口返回的数据流格式 二. 方法实现 1. image 图片类型 2. txt 文件类型 3. pdf 文件类型
一、接口返回的数据流格式
二. 方法实现
1. image 图片类型
< img :src = " imageUrl" alt = " " srcset = " " />
async getData ( ) { const res = await axios. post ( "/project/download" , { id : "" , } , { responseType : "blob" , transformResponse : [ async ( data ) => { return await this . transformData ( data) ; } , ] , } ) ; let blob = new Blob ( [ res. data] , { type : "image/jpeg" } ) ; this . imageUrl = URL . createObjectURL ( blob) ;
} ,
2. txt 文件类型
< div> {{ txtContent }}</ div>
async getData ( ) { const res = await axios. post ( "/project/download" , { id : "" , } , { responseType : "blob" , transformResponse : [ async ( data ) => { return await this . transformData ( data) ; } , ] , } ) ; res. data. then ( ( data ) => { this . txtContent = data; } ) ;
} , transformData ( data ) { return new Promise ( ( resolve ) => { let reader = new FileReader ( ) ; reader. readAsText ( data, "UTF-8" ) ; reader. onload = ( ) => { resolve ( reader. result) ; } ; } ) ;
} ,
3. pdf 文件类型
< iframe:src = " pdfUrl" frameborder = " 0" style = " background-color : white" allowTransparency = " true" height = " 100%" width = " 100%"
> </ iframe>
async getData ( ) { const res = await axios. post ( "/project/download" , { id : "" , } , { responseType : "blob" , headers : { "Content-Type" : "application/pdf;charset=UTF-8" , } , } ) ; let blob = new Blob ( [ res. data] , { type : "application/pdf" } ) ; const url = URL . createObjectURL ( blob) ; this . pdfUrl = url;
} ,