下載excel
@RequestMapping("/downLoad")
public void downLoad(HttpServletRequest req,HttpServletResponse res){
//獲取要下載的模板名稱
String fileName = req.getParameter("fileName");
//設置要下載的文件的名稱
res.setHeader("Content-disposition","attachment;fileName="+fileName);
//通知客服文件的MIME類型
res.setContentType("application/vnd.ms-excel;charset=UTF-8");
//獲取文件的路徑
String filePath = req.getSession().getServletContext().getRealPath("/WEB-INF/file")+"/"+fileName;
filePath = filePath.replace("\\", "/");
InputStream input = null;
OutputStream out =null;
try {
input = new FileInputStream(filePath);
out =res.getOutputStream();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
byte[] b = new byte[2048];
int len;
try {
while((len=input.read(b))!=-1){
out.write(b,0,len);
}
} catch (IOException e) {
e.printStackTrace();
}
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
filePath = filePath.replace("\\", "/");
解析:request.getSession().getServletContext() 獲取的是Servlet容器對象,相當於tomcat容器了。
getRealPath("/") 獲取實際路徑,在上面代碼中獲取的是獲取WEB-INF下file文件的路徑。第一個'/'代表根目錄。
所以filePath獲取的是templet.xlsx的路徑。
response.setHeader("Content-disposition","attachment;fileName="+fileName);
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
解析:ContentType的作用是讓服務器告訴瀏覽器它發送的數據是什麼文件類型,這裏的vnd.ms-excel是指excel文件。
設置 Content-Disposition 告訴瀏覽器下載文件的名稱。當爲attachment時表示作爲附件下載,當爲inline時,表示瀏覽器內嵌顯示一個文件