文件链接下载

本文介绍了如何通过HTML页面创建超链接,链接到一个Servlet,从而实现文件的下载。在HTML中,链接直接指向Servlet,并在URL中携带文件路径和名称作为参数。Servlet接收到请求后,处理下载操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Html文件,使用超链接,指向处理下载请求的servlet类,并附带上文件路径和文件名
(就像自动用GET那样,在URL上使用?,&来使用和连接参数)

2.servlet要处理:

0.获取request获取URL的参数,文件路径filepath和文件名filename
1.使用ServletContext获取文件名filename的MIME类型,并设置为响应头的ContentType
2.使用ServletContext获取文件路径filepath的真实路径realpath,并为之创建出File对象
3.设置响应头的content-disposition为 attachment;filename=文件名,相当于弹窗附件下载,命为文件名
4.使用BufferedInputStream,将文件读入内存,输入到byte[],并同时使用response字节输出流输出

Download.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 使用超链接,指向处理下载请求的servlet类,并附带上文件路径和文件名 -->
<a href = "http://localhost:8080/WebServlet/ResponseDemo3?filepath=./WEB-INF/bb.jpg&filename=bb.jpg" >图片</a>
<a href = "http://localhost:8080/WebServlet/ResponseDemo3?filepath=./b.txt&filename=b.txt" >文本</a>

</body>
</html>

ResponseDemo3_servlet

@WebServlet("/ResponseDemo3")
public class ResponseDemo3 extends HttpServlet {
	private static final long serialVersionUID = 1L;
   
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);	
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		//0.获取request获取URL的参数,文件路径filepath和文件名filename
		String filepath = request.getParameter("filepath");
		String filename = request.getParameter("filename");
		
		//1.使用ServletContext获取文件名filename的MIME类型,并设置为响应头的ContentType
		ServletContext servletContext = this.getServletContext();
		response.setContentType(servletContext.getMimeType(filename));
		
		//2.使用ServletContext获取文件路径filepath的真实路径realpath,并为之创建出File对象
		String realPath = servletContext.getRealPath(filepath);
		File file = new File(realPath);
		
		//3.设置响应头的content-disposition为 attachment;filename=文件名,相当于弹窗附件下载,命为文件名
		response.setHeader("content-disposition", "attachment;filename="+filename);
		
		//4.使用BufferedInputStream,将文件读入内存,输入到byte[],并同时使用response字节输出流输出
		BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
		ServletOutputStream outputStream = response.getOutputStream();
		byte[] bs = new byte[4096];
		while(bufferedInputStream.read(bs) != -1) {
			outputStream.write(bs);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值