在作项目的时候,碰到前端须要下载文件,其中涉及到的文件必须从后端传送。
一开始考虑这个问题解决的时候用静态资源,可是因为项目中的是对文件处理以后及时发送到前端。
后面考虑用文件流的方式,后端以文件流的方式,前端经过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