java web 下载_Java Web之下载文件

该博客详细介绍了如何利用Servlet将文件存放在WEB-INF目录下,确保其安全性,只允许通过特定的Servlet访问。内容包括:设置权限检查、获取文件名、获取文件路径、设定响应头以提示浏览器下载而非直接打开、处理不同浏览器的文件名编码问题以及实际的文件读取和下载操作。示例代码展示了如何创建一个下载Servlet来处理各种细节。
摘要由CSDN通过智能技术生成

下载的文件,不能随便的被访问,放在外面的文件夹肯定不行,url一敲就能访问了,所以我们要放在WEB-INF文件夹里面,WEB-INF文件夹只有Servlet才能访问,我们新建一个文件夹,叫download里面我放了三个文件,一个zip,一个exe,一个png,如图:

ebe1e8489df85de0f83f81f644be7830.png

我新建了一个JSP

下载文件

下载文件

ColorPix_CHS.zip

QQ9.0.4.exe

小女孩.png

一个Servlet

packagecom.vae.download;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;importjava.net.URLEncoder;importjava.nio.file.Files;importjava.nio.file.Paths;

@WebServlet("/download")public class DownloadServlet extendsHttpServlet {

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {//1.检查权限,检查积分或者什么什么币,这个不讲//2.获取下载的资源文件的名称,并且进行转码,转码是为了让你的中文文件显示的时候不乱码,但是我不转码也没乱码

String filename = req.getParameter("filename");

filename=new String(filename.getBytes("ISO-8859-1"),"UTF-8");//3.从服务器中获取想下载的文件的绝对路径

String realPath=super.getServletContext().getRealPath("/WEB-INF/download/"+filename);//4.告诉浏览器不要打开文件,直接下载,原因是IE6会直接打开文件,所以这个算是特意为IE6设置的

resp.setContentType("application/x-msdownload");//5.设置下载文件的时候,文件名称应该是文件自己本身的名称,因为默认的下载名称的down

String userAgent=req.getHeader("User-Agent");if (userAgent.contains("MSIE")) {//如果是IE浏览器,是这种编码格式

filename=URLEncoder.encode(filename,"UTF-8");

}else{//非IE浏览器,是这种编码格式

filename=new String(filename.getBytes("UTF-8"),"ISO-8859-1");

}

resp.setHeader("Content-Disposition","attachment;filename="+filename);//6.下载文件

Files.copy(Paths.get(realPath),resp.getOutputStream());

}

}

需要讲解的都在注释里面了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值