package com.yangche.utils; import javax.servlet.http.HttpServletResponse; import java.io.*; public class UploadDownUtil { /** *文件下载 * @param path * @param response * @return */ public static HttpServletResponse download(String path, HttpServletResponse response) { try { // path是指欲下载的文件的路径。 File file = new File(path); // 取得文件名。 String filename = file.getName(); // 取得文件的后缀名。 String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase(); // 以流的形式下载文件。 InputStream fis = new BufferedInputStream(new FileInputStream(path)); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); // 清空response response.reset(); // 设置response的Header response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes())); response.addHeader("Content-Length", "" + file.length()); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); toClient.write(buffer); toClient.flush(); toClient.close(); } catch (IOException ex) { ex.printStackTrace(); } return response; } }
maven依赖(可能会和tomcat自带的冲突,看情况,如果没有这个依赖再添加)
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency>
controller层的代码(前端直接访问这个方法即可直接下载对应的文件!可以自己拿浏览器访问试试)
package com.yangche.controller; import com.yangche.utils.UploadDownUtil; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.net.URL; @Controller public class FileController { @RequestMapping(path="/api/file/download") @ResponseBody public void fileDownload(HttpServletRequest request, HttpServletResponse response){ URL xmlpath = this.getClass().getClassLoader().getResource("file/123.xlsx"); //通过这种方式获得文件的路径 String path = xmlpath.getPath(); UploadDownUtil.download(path, response); } }
如图:我把前端要下载的文件放到了这个目录下
注意:有时候把文件放到自己的项目中下载后打不开,我的项目就是这种情况,一个excel打不开,但是如果文件不在项目中,直接引用电脑上的文件,就是可以打开的,目前不清楚是什么原因导致的,望不吝赐教。