在网络上,假设我们超链接地址对应于jpg档,txt档,点击链接,默认浏览器打开这些文件,而不是下载,那么,你如何实现竞争力的默认下载。
1.可通过自己写一个download.jsp来实现
<%@ page contentType="text/html; charset=UTF-8"%> <%@ page import="java.net.*"%> <% //得到文件名称字和路径 String filename = request.getParameter("filename"); String filepath = request.getParameter("filepath"); String displayfilename = URLEncoder.encode(filename,"UTF-8"); try { response.setContentType("application/x-download"); response.setHeader("Content-Disposition","attachment;filename="" + displayfilename + """); //HttpServletContext httpServletContext = (HttpServletContext)application; RequestDispatcher dis = application.getRequestDispatcher(filepath + filename); //application.getRequestDispatcher(url)这里的url仅仅能是相对路径,如/upload/1.jpg if (dis != null) { dis.forward(request,response); } response.flushBuffer(); } catch (Exception e) { e.printStackTrace(); System.out.println("下载取消:" + filepath + filename); } out.clear(); out = pageContext.pushBody(); %>
当我们要链接图片(或其它浏览器默认打开的格式,这里以图片为例)时。把相应的文件名称和地址传入download.jsp的filename和filepath參数里。详细写法例如以下
<a class="blue-line-a" href=" /PackTool/download.jsp?filename=WinGUI.exe&filepath=/other/WinGUI.exe">/other/WinGUI.exe</a>
通过这样方式,我们就能实现文件的默认下载了,而不是浏览器的默认打开。
2.通过文件输出流方式(推荐):
<%@ page language="java" contentType="application/x-msdownload" pageEncoding="UTF-8"%> <%@ page import="java.net.*"%> <%@ page import="java.io.*"%> <%@ page import="com.hikvision.modules.guide.util.*"%> <% //关于文件下载时採用文件流输出的方式处理: //加上response.reset(),而且全部的%>后面不要换行。包含最后一个; String filename = request.getParameter("filename"); String filepath = request.getParameter("filepath"); response.reset();//能够加也能够不加 response.setContentType("application/x-download"); //"想办法找到要提供下载的文件的物理路径+文件名称";D:/PackTools/shareFolder String filedownload = GetSharePathXml.getShareFolderPath() + filename; //"给用户提供的下载文件名称" String filedisplay = filename; filedisplay = URLEncoder.encode(filedisplay,"UTF-8"); response.addHeader("Content-Disposition","attachment;filename=" + filedisplay); OutputStream outp = null; FileInputStream in = null; try { outp = response.getOutputStream(); in = new FileInputStream(filedownload); byte[] b = new byte[1024]; int i = 0; while((i = in.read(b)) > 0) { outp.write(b, 0, i); } outp.flush(); } catch(Exception e) { System.out.println("Error!"); e.printStackTrace(); } finally { if(in != null) { in.close(); in = null; } if(outp != null) { outp.close(); out.clear(); outp = null; } } %>
版权声明:本文博主原创文章。博客,未经同意不得转载。