文件的下载

	被下载的资源必须放到WEB-INF目录下(只要用户不能通过浏览器直接访问就OK),然后通过Servlet完成下载。

在jsp页面中给出超链接,链接到DownloadServlet,并提供要下载的文件名称。然后DownloadServlet获取文件的真实路径,然后把文件写入到response.getOutputStream()流中。
download.jsp

<body>
	<a href="<c:url value='/download/download1?path=论坛.png'/>">论坛.png</a>
	<a href="<c:url value='/download/download1?path=龙猫.jpg'/>">龙猫.jpg</a>
</body>

DownloadServlet.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {		
	String filename = request.getParameter("path");
	// GET请求中,参数中包含中文需要自己动手来转换。
	// 当然如果你使用了“全局编码过滤器”,那么这里就不用处理了
	//filename = new String(filename.getBytes("ISO-8859-1"), "UTF-8");
	String filepath = this.getServletContext().getRealPath("/uploads/"+filename);

	File file = new File(filepath);
	if(!file.exists()) {
		response.getWriter().print("您要下载的文件 不存在!");
		return;
	}
	// 所有浏览器都会使用本地编码,即中文操作系统使用GBK
	// 浏览器收到这个文件名后,会使用iso-8859-1来解码
	filename = new String(filename.getBytes("GBK"), "ISO-8859-1");
	response.addHeader("content-disposition", "attachment;filename=" + filename);
	IOUtils.copy(new FileInputStream(file), response.getOutputStream());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值