c#后端返回文件的二進制數據,前端直接生成blob對象創建的文件是錯誤的!


本文只是記錄實現過程中,所遇到的問題,等下次再遇到時,能夠輕松解決。
這是后端的返回結果,文件的二進制數組在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了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM