本文只是記錄實現過程中,所遇到的問題,等下次再遇到時,能夠輕松解決。
這是后端的返回結果,文件的二進制數組在data里。
剛開始我的js代碼是這樣寫的
let url = window.URL.createObjectURL(new Blob([res.data], {
type: "application/vnd.ms-excel"
}));
result += "," + "<a download='錯誤信息.xlsx' href='"+url+"'>點擊可下載錯誤信息</a>"
}
結果下載的文件內容是我返回的二進制。
后面搜尋了多方資料,找到了原因。我返回的二進制數組他的類型被js認為是array,而創建blob對象的函數,只接受ArrayBuffer,ArrayBufferView,Blob類型的數據,所以我們只需要將返回的array轉換成相應的類型就可以了。下面是我更改后的代碼
var uInt8Array = new Uint8Array(res.data);
let url = window.URL.createObjectURL(new Blob([uInt8Array], {
type: "application/vnd.ms-excel"
}));
result += "," + "<a download='錯誤信息.xlsx' href='"+url+"'>點擊可下載錯誤信息</a>"
本來是個很簡單的問題,由於對js不熟悉,卻花費了我大量的時間,記錄一下,得再去學習一下js了。