文件下載(獲取響應(yīng)頭里的數(shù)據(jù) Content-Disposition )

  • 如果前端想要獲取到響應(yīng)頭response中獲取自定義headers需要后端設(shè)置一下 Access-Control-Expose-Headers : '自定義屬性名'
//這里  我需要獲取response里headers的Content-Disposition  所以后端需要設(shè)置如下:
response.setHeader( "Access-Control-Expose-Headers ", "Content-Disposition" );
image.png
  • 前端下載接口 需要添加 responseType:'blob'
//request 是axios封裝好的
...
 export function download(id:number) {
  return request({
    url: '/omc-server/data/backupDataRecord/download/'+id,
    responseType:'blob',
    method: 'get'
  })
}

  • 調(diào)接口
const onDownloadHandle = (node: BackupRecoveryRecord) => {
  systemBackupDownload(node.id).then(response => {
    let fileName = ''
    let temp = response.headers['content-disposition']
    let filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
    let matches = filenameRegex.exec(temp);
    if (matches != null && matches[1]) {
      fileName = matches[1].replace(/['"]/g, ''); //  解析出文件名 Backup-20230307152152.tgz
    }
    //調(diào)用成功,在html中創(chuàng)建一個a元素
    let aTag = document.createElement('a');
    //創(chuàng)建一個blob對象
    let blob: any = new Blob([response.data]);
    aTag.download = fileName + '.tgz'; // 下載的文件名
    aTag.href = URL.createObjectURL(blob);   //創(chuàng)建一個URL對象
    aTag.click();
    URL.revokeObjectURL(blob);          //釋放URL對象
    
  }).catch(err => console.log(err))
}
  • 下載成功
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容