response—文件下载

本文介绍了如何通过Servlet来实现文件的下载。主要内容包括设置文件的MIME类型和字符编码,设置HTTP响应头以触发浏览器的下载行为,以及针对不同浏览器处理中文文件名的编码问题。

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

文件下载:服务器文件发送到浏览器
超链接方式:浏览器能直接解析,不能直接下载
代码方式:(两个头一个流)
设置文件的mime类型和编码:response.setContextType(“mime类型;charset=编码方式”);
设置文件下载头:response.setHeader(“content-disposition”,“attachment;filename=”+文件名);
输出流:response.getoutputStream();
ps:火狐浏览器中文编码方式:base64格式
其他浏览器中文编码方式:utf8格式
servlet代码:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html;charset=utf-8");
		//获取文件名称
		String fileName = request.getParameter("fileName");
		//获取servletContext对象
		ServletContext sc = getServletContext();
		//获取文件的mime类型
		String mimeType = sc.getMimeType("/"+fileName);
		System.out.println(mimeType);
		//设置文件mime类型头
		//response.setHeader("content-type", mimeType);
		response.setContentType(mimeType);
		//设置文件下载头
		//获取浏览器的版本内核
		String agent = request.getHeader("user-agent");
		System.out.println("当前用户使用的浏览器的版本内核为:"+agent);
		response.setHeader("content-disposition","attachment;filename="+DownLoadUtils.getName(agent, "中文文件名"));
		
		//获取所要下载文件的输入流(把要下载的文件读取到输入流中)
		InputStream fis = sc.getResourceAsStream("/"+fileName);
		//把输入流中的的数据用response的输出流输出到浏览器
		ServletOutputStream fos = response.getOutputStream();
		//俩流互拷
		//创建一个有效字节数
		int len;
    	//创建一个字节缓冲数据
		byte[] b = new byte[1024];
		//拷贝
		while((len=fis.read(b))!=-1) {
			fos.write(b, 0, len);
		}
		//关闭流
		fos.close();
		fis.close();
		
	}

html代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>超链接方式下载</h1>
	<a href="/serverDay03/1.txt">下载txt</a><br>
	<a href="/serverDay03/1.png">下载png</a><br>
	<a href="/serverDay03/1.xls">下载xls</a><br>
	<a href="/serverDay03/1.zip">下载zip</a><br>
	
	<h1>java代码方式下载</h1>
	<a href="/servletUpload/load?fileName=1.txt">下载txt</a><br>
	<a href="/servletUpload/load?fileName=1.png">下载png</a><br>
	<a href="/servletUpload/load?fileName=1.xls">下载xls</a><br>
	<a href="/servletUpload/load?fileName=1.zip">下载zip</a><br>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值