最近用到thinkPHP自帶的函數下載文件,Http:download。但是調試了很長時間都發現,不管什么格式的文件下載,只有在response里面會顯示下載好的內容,無法以瀏覽器的形式將文件下載下來。通過嘗試不同方法,修改文件后綴、修改下載路徑、修改download的header等各種方法都沒法解決下載問題。

最終定位到js位置,發現下載方式采用ajax異步請求的方式進行下載,網上搜了一下,改成了使用location.href = APP +"xxxxx.download?filename="+filename的鏈接方式,就可以通過瀏覽器方式下載了。
結合網上相同情況原因是:
因為response原因,一般請求瀏覽器是會處理服務器輸出的response,例如生成png、文件下載等,然而ajax請求只是個“字符型”的請求,即請求的內容是以文本類型存放的。文件的下載是以二進制形式進行的,雖然可以讀取到返回的response,但只是讀取而已,是無法執行的,說白點就是js無法調用到瀏覽器的下載處理機制和程序。
