前端獲取不到後端新增的請求頭資訊
問題場景
在前後端分離專案中 , 後端新增請求頭資訊,頭存放檔案下載名稱以及日期等資訊,在前端執行下載事件時,發現封裝Download.js報錯,原因在於頭content-disposition獲取失敗。
發現問題
後端設定請求頭資訊:
response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
前端下載事件
<a-button icon="export" :loading="exporting" @click="() => {
this.exporting = true;
Download(this.axios.get(this.$Api.*.*.exportCostFinance, {
responseType: 'arraybuffer',
params: {
company: this.form.company === 0 ? 0 : this.form.company || -1,
department: this.form.department || 0,
branchOffice: this.form.branchOffice || 0,
startMonth: this.form.startMonth && this.form.startMonth.format('YYYY/MM/01') || '',
endMonth: this.form.endMonth && this.form.endMonth.endOf('month').format('YYYY/MM/DD') || '',
}
})).finally(() => this.exporting = false);
}">匯出</a-button>
封裝Download.js
function Download(request) {
return new Promise((resolve, reject) => {
request.then(res => {
console.log(res)
let filename = res.headers['content-disposition'].replace('attachment;filename=', '');
let conentType = res.headers['content-type'];
const blob = new Blob([res.data], {type: conentType});
if (typeof window.navigator.msSaveBlob !== 'undefined') {
// 相容IE,window.navigator.msSaveBlob:以本地方式儲存檔案
window.navigator.msSaveBlob(blob, decodeURI(filename))
} else {
// 建立新的URL並指向File物件或者Blob物件的地址
const blobURL = window.URL.createObjectURL(blob)
// 建立a標籤,用於跳轉至下載連結
const tempLink = document.createElement('a')
tempLink.style.display = 'none'
tempLink.href = blobURL
tempLink.setAttribute('download', decodeURI(filename))
// 相容:某些瀏覽器不支援HTML5的download屬性
if (typeof tempLink.download === 'undefined') {
tempLink.setAttribute('target', '_blank')
}
// 掛載a標籤
document.body.appendChild(tempLink)
tempLink.click()
document.body.removeChild(tempLink)
// 釋放blob URL地址
window.URL.revokeObjectURL(blobURL)
}
resolve(res);
}).catch(res => {
reject(res);
});
});
}
export {
Download
}
點選下載事件,content-disposition頭資訊實際上沒有,Download.js報錯,下載失敗。
解決問題
response.addHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
response.setHeader("Access-Control-Expose-Headers","Content-Disposition");
重啟專案,再次點選下載事件,下載成功。
相關文章
- 使用Python獲取HTTP請求頭資料PythonHTTP
- 前端請求後端資料的三種方式!前端後端
- Yii2 獲取當前請求的路由資訊路由
- 前端傳送的請求,是如何請求到後端服務的?前端後端
- Laravel 中 $request 獲取請求資訊 用法 總結Laravel
- 前端快取API請求資料前端快取API
- 服務端如何獲取客戶端請求IP地址服務端客戶端
- 關於POST傳值太大後端獲取不到後端
- python requests get請求 如何獲取所有請求Python
- 前端呼叫介面成功但後端沒收到請求前端後端
- vue使用axios請求後端資料VueiOS後端
- 微信小程式 獲取微信暱稱頭像 獲取openid 封裝請求post微信小程式封裝
- 新增表單請求後鉤子
- [系列] Go - 基於 GORM 獲取當前請求所執行的 SQL 資訊GoORMSQL
- SpringBoot 獲取訪問介面的請求的IP地址和瀏覽器資訊Spring Boot瀏覽器
- MDN新增“HTTP有條件請求”標頭HTTP
- spring mvc中獲取請求URLSpringMVC
- 有趣的請求引數/請求頭
- 跨域請求後端配置跨域後端
- Vue+echart 展示後端獲取的資料Vue後端
- curl 請求獲取響應時間
- 表單請求獲取路由引數路由
- ASP.NET Core獲取請求完整的UrlASP.NET
- (七)Spring Boot Controller的請求引數獲取Spring BootController
- C# 請求的名稱有效,但是找不到請求的型別的資料C#型別
- SpringBoot 專案打包後獲取不到resource下資源的解決Spring Boot
- Jmeter —— jmeter設定HTTP資訊頭管理器模擬請求頭JMeterHTTP
- vue請求後端資料和跨域問題Vue後端跨域
- TCP 請求頭TCP
- 在小程式後端中轉獲取介面資料,繞過前端呼叫限制後端前端
- ARP原理概述——基於WinPcap傳送ARP請求資料包獲取遠端MAC地址PCAMac
- 關於模型關聯 獲取不到關聯資訊 求教模型
- 前端 | Vue nextTick 獲取更新後的 DOM前端Vue
- ajax中設定請求頭和自定義請求頭
- 爬蟲實戰:從HTTP請求獲取資料解析社群爬蟲HTTP
- 前端資料請求的終極方案前端
- spring boot 獲取客戶端ip資訊Spring Boot客戶端
- springboot打jar包請求jsp請求不到問題Spring BootJARJS