在作項目的時候,碰到前端須要下載文件,其中涉及到的文件必須從後端傳送。
一開始考慮這個問題解決的時候用靜態資源,可是因爲項目中的是對文件處理以後及時發送到前端。
後面考慮用文件流的方式,後端以文件流的方式,前端經過a標籤直接進入下載。前端
關鍵:後端返回前端的頭部中添加設置contentType爲x-download.java
前端:後端
<a href="後端文件下載接口地址" >查看更多</a>
複製代碼
後端:GETapp
@Override
public void download(String id, HttpServletRequest request, HttpServletResponse response) {
//String id=(String)params.get("id");
File file = new File("/home/hzhao/IdeaProjects/information/src/main/resources/public/", id + ".txt");
try(InputStream inputStream = new FileInputStream(file);
OutputStream outputStream = response.getOutputStream();){
response.setContentType("application/x-download");
response.addHeader("Content-Disposition", "attachment;filename="+id+".txt");
IOUtils.copy(inputStream, outputStream);
outputStream.flush();
}catch (Exception e){
e.printStackTrace();
}
}
複製代碼
流是單向的,分輸入流和輸出流,參照點爲當前程序。ide
輸入流是用於讀取數據,InputStream 抽象類,定義輸入流的讀取字節方法,全部的輸入流都繼承自此類。spa
輸出流用於寫數據,OutputStream是全部輸出流的父類,也是抽象類。code
流分爲節點流和處理流 節點流是低級流,負責讀寫數據的流。 處理流式高級流,不能獨立存在,用於處理其餘的流。主要是爲了簡化讀寫數據中的操做。orm