原理:采用ServletOutputStream對象直接從一個字節輸入流中讀取出來,然后再原封不動的輸出到客服端。
具體如下:
一.給下載文件名設置utf-8格式
try{
fileName=URLEncoder.encode(fileName,"utf-8");
} catch(UnsupportedEncodingException e1){
e1.printStackTrace();
}
二.設置消息頭
//response.setContentType():這 個方法設置發送到客戶端的響應的內容類型,此時響應還沒有提交
//如果response的contenttype是text/html,那么就直接通過瀏覽器就可以解析內容了。
//如果response的contenttype是application/x-excel,那么瀏覽器就不能自己解析了,就需要通過excel程序來打開,或者另存為文件
//response.setContentType("application/octet-stream");//告訴瀏覽器輸出內容為流
//Content-Disposition中指定的類型是文件的擴展名,並且彈出的下載對話框中的文件類型圖片是按照文件的擴展名顯示的,點保存后,文件以filename的值命名,保存類型以Content中設置的為准。注意:在設置Content-Disposition頭字段之前,一定要設置Content-Type頭字段。
//此報文頭content-disposition, 對報文體進行描述, 規定了接收端的顯示處理行為。
//此報文頭的值有兩種, attachment 和 inline, 分別表示保存 還是 直接顯示。
response.setContentType("application/octet-stream");
response.setHeader("content-disposition","attachment;fileName" +fileName)
三.把字節數組放入流中,返回給前端
try(ServletOutputStream outStream=response.getOutputStream()){
byte[] bs= new byte[1024];
outStream.write(bs,0,bs.length);
outStream.fluse();
}catch(Exception e){
e.printStackTrace();
}