背景:最近做項目重構將以前的ssh + angular js架構,重構為spring boot + vue。項目是一個數據管理平台,后台涉及到多表關聯查詢,數據導入導出等。
問題:讀取resource 目錄下文件時出現路徑找不到。
原因:spring boot 將項目打包為jar,使用 java - jar 包名 在服務器上運行。此時文件為打包文件,所以不能通過路徑獲取到文件。類似不能讀取壓縮包中的文件,必須先解壓縮。結論:spring boot 中的文件只能通過流來進行讀取。
可以通過以下方法進行流的讀取。
InputStream in = this.getClass().getResourceAsStream("/files/aa.xls");
注: this.getClass().getResourceAsStream("");指向的路徑問Resource跟目錄,可以根據目錄路徑來寫自己的文件路徑。
注:如果文件路徑或者文件名中存在中文,路徑也會訪問不到。所以文件路徑和文件盡量使用英文。可以在輸出文件的時候,修改文件名為中文。
返回給前端流,來下載文件,以excel文件為例。
String name = "呵呵.xls"
response.setContextType("application/vnd.ms-excel");
response.setHeader("Content-dispositon","inline;filename=" + new String(name.getBytes("GBK"),"ISO8859_1"));
進行下載。