天天看點

vue 前端post檔案下載下傳,可blob連結格式下載下傳,可base64格式下載下傳

blob連結與base64連結如下

vue 前端post檔案下載下傳,可blob連結格式下載下傳,可base64格式下載下傳

項目中三萬條資料下載下傳顯示失敗,是以選了第一種----代碼中的  res 是背景傳回的流檔案。res.data是blob對象,包括size、type2字段與

export function loadFile(res) {
    //背景傳回的資料是--檔案流的形式----
    //通過請求頭聲明---responseType: 'blob'---獲得blob格式資料,blob為--類檔案對象,存儲的是二進制資料流
    //如果不想在請求頭聲明,可通過new Blob([二進制檔案流],{type:''})//不推薦
    const a = document.createElement('a')//第1種方式,createObjectURL生成blob連結
    a.style.display = "none"
    let dataUrl = URL.createObjectURL(res.data)
    console.log(dataUrl)
    let fileName = decodeURI(res.headers['content-disposition'].split(';')[1].split('=')[1])
    document.body.appendChild(a)
    a.href = dataUrl
    a.download = fileName + '.xls';
    a.click()
    URL.revokeObjectURL(res.data);
    document.body.removeChild(a)
    //const reader = new FileReader()//第2種方式 FileReader生成base64的連結,正常導出沒問題,3萬條資料,下載下傳顯示失敗了
                                     //我的了解是href連結的内容,因為base64格式,位元組太多,或者丢失或者不允許是以失敗了
    // reader.readAsDataURL(res.data)
    // reader.onload = (e) => {
    //     const a = document.createElement('a')
    //     a.style.display = "none"
    //     let fileName = decodeURI(res.headers['content-disposition'].split(';')[1].split('=')[1]) // 檔案名
    //     a.download = fileName
    //     console.log('e.target.resulte.target.result', e.target.result)
    //     a.href = e.target.result
    //     document.body.appendChild(a)
    //     a.click()
    //     document.body.removeChild(a)
    // }
}