一、 通過二進制流(Blob)下載
1 、API請求時候帶上類型
export function download ( fphm ) { return axios ( { url : "/ynpst/download-invoice?fphm=" + fphm, method : 'get' , responseType : 'blob' } )
}
2、文件預覽和下載
seeItem ( fphm ) { preview ( fphm) . then ( res => { const blob = new Blob ( [ res] , { type : 'application/pdf;chartset=UTF-8' } ) let blobUrl = window. URL . createObjectURL ( blob) window. open ( blobUrl) } ) } , dowload ( fphm ) { download ( fphm) . then ( res => { this . downloadFn ( res) } ) } , downloadFn ( flow ) { if ( ! flow) return const blob = new Blob ( [ flow] ) const blobUrl = window. URL . createObjectURL ( blob) const a = document. createElement ( 'a' ) a. style. display = 'none' a. download = '發票.pdf' a. href = blobUrla. click ( ) }
二、通過文件地址Url下載文件
1、預覽
window. open ( fileUrl) 或者使用 a 標簽
2、下載
調用downLoad方法下載文件,以下是具體方法:function getBlob ( url ) { return new Promise ( resolve => { const xhr = new XMLHttpRequest ( ) ; url = url + ` ?r= ${ Math. random ( ) } ` ; xhr. open ( "GET" , url, true ) ; xhr. responseType = "blob" ; xhr. onload = ( ) => { if ( xhr. status === 200 ) { resolve ( xhr. response) ; } } ; xhr. send ( ) ; } ) ; } function saveAs ( blob, filename ) { if ( window. navigator. msSaveOrOpenBlob) { navigator. msSaveBlob ( blob, filename) ; } else { const anchor = document. createElement ( "a" ) ; const body = document. querySelector ( "body" ) ; anchor. href = window. URL . createObjectURL ( blob) ; anchor. download = filename; console. log ( filename, "filename" ) ; anchor. style. display = "none" ; body. appendChild ( anchor) ; anchor. click ( ) ; body. removeChild ( anchor) ; window. URL . revokeObjectURL ( anchor. href) ; } } export async function download ( url, newFilename ) { const blob = await getBlob ( url) ; console. log ( blob, 'blob' ) ; saveAs ( blob, newFilename) ; }