最近开始做第一个项目,在做文件下载的方面遇到了一点问题,现在在这里分享一下。
对于文件下载,我一开始的做法是读取了数据库中的需要下载的文件的相对于工程的相对路径后赋值给html代码的a标签的href属性,但是在测试的时候发现像txt、docx这类文本文档并不是提示下载,而是将相应的文件直接打开了,而由于编码的不同,就出现了满屏乱码这种情况,后来了解到是浏览器对这类简单的文件,它本身能够解析的文件类型都会直接打开显示,只有那些浏览器无法识别解析的文件类型才会提示用户下载,后来我的解决方法是写了一个下载的servlet类,代码如下:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out; //接收参数,path表示当前文件相对项目根目录的相对路径 String path = request.getParameter("path"); //获取文件的绝对路径 String filepath = request.getSession().getServletContext().getRealPath(path); File file = new File(filepath); //判断该文件是否存在 if(!file.exists()) { out = response.getWriter(); out.println("<script>alert(\"文件不存在!\");window.history.back()</script>"); out.close();return; } response.addHeader("content-disposition", "attachment;filename=" + path); IOUtils.copy(new FileInputStream(file), response.getOutputStream()); }
时间: 2024-10-16 23:04:28