前言:
经常在网上点开一个链接,就可以让你下载一个文件,比如jar,jdk等的文件。就通过response实现这种下载文件、
实现步骤:
1.要获取下载文件的路径
2.下载的文件名是啥?
3.设置想办法让浏览器能够支持下载我们需要的东西
4.获取下载文件的输入流
5.创建缓冲区
6.获取OutputStream对象
7.将FileOutputStream流写入到buffer缓冲区
8.使用OutputStream将缓冲区中的数据输出到客户端!
代码:
在maven项目的resources下放一个图片,这样项目发布的时候,用户就可以点击链接下载对应的文件:
import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.net.URLEncoder; public class Resopn下载文件 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1、获取要下载文件的绝对路径 String realPath = "F:\Maven\web-maven\servlet-03\target\classes\壁纸.png"; System.out.println("下载的文件路径" + realPath); //2、下载的文件名是什么[截取文件绝对路径的最后一个后面的字符//右键复制的路径【可以】F:Mavenweb-mavenservlet-03 argetclasses壁纸.png String fileName = realPath.substring(realPath.lastIndexOf("\") + 1); //3、让浏览器能够支持我们下载的文件[如果文件名是中文就需要转码] response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); //4、获取下载文件的输入流 FileInputStream fis = new FileInputStream(realPath); //5、创建缓冲区 int len = 0; byte[] bytes = new byte[1024]; //6、创建输出流 ServletOutputStream sot = response.getOutputStream(); //7、写出文件 while ((len = fis.read(bytes)) != -1) { sot.write(bytes, 0, len); sot.flush(); } //8、关闭流 sot.close(); fis.close(); } }
先码后看,这里没有什么难理解的,就是第三步是比较生疏的,要用的话就上网查询一下就好了。
拓展:
1、点击一个链接,或者是超链接,或者是表单,就可以下载资源就很好。
所以我们新增一个JSP页面,让用户点击这个页面上面的按钮,进行下载文件:
2、EL, Expression Language,表达式语言,是一种在JSP页面中获取数据的简单方式。EL表达式是从JSP2.0版本开始才引入的概念。EL表达式的基本语法形式很简单:在JSP页面的任何静态部分均可通过${变量}的形式获取到指定表达式的值。
3、解释一下${pageContext.request.contextPath}取出部署的应用程序名或者是当前的项目名称
4、注意:如果EL表达式没有提示的话,就在Maven项目中的pro.xml文件中添加:
1 3 4 5 6 |
<dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> |