文件下载
创建一个前台页面index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>文件下载</h1>
<a href="/web02_response/downLoadServlet01?filename=a.flv">a.flv</a>
<a href="/web02_response/downLoadServlet01?filename=美女.jpg">美女.jpg</a>
<a href="/web02_response/downLoadServlet01?filename=a.mp3">a.mp3</a>
<a href="/web02_response/downLoadServlet01?filename=a.mp4">a.mp4</a>
<a href="/web02_response/downLoadServlet01?filename=a.rar">a.rar</a>
<a href="/web02_response/downLoadServlet01?filename=a.txt">a.txt</a>
</body>
</html>
创建一个Servlet
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 获取文件名
String filename = request.getParameter("filename");
//解决读取文件名的中文乱码
filename = new String(filename.getBytes("iso-8859-1"), "utf-8");
// 告诉浏览器文件的类型
response.setContentType(getServletContext().getMimeType(filename));
// 告诉浏览器直接解析不要下载
response.setHeader("Content-disposition", "attachment;filename="+ filename);
// 1.获得文件的绝对路径
String realPath = getServletContext().getRealPath("download/" + filename);
// 输入流
FileInputStream in = new FileInputStream(realPath);
// 将文件写入response缓冲区
ServletOutputStream out = response.getOutputStream();
int len = 0;
byte bys[] = new byte[1024];
while ((len = in.read(bys)) == -1) {
out.write(bys);
}
in.close();
out.close();
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
运行结果
处理不同浏览器下载中文乱码
// 获得请求头中的User-Agent
String agent = request.getHeader("User-Agent");
// 根据不同浏览器进行不同的编码
String filenameEncoder = "";
if (agent.contains("MSIE")) {
// IE浏览器
filenameEncoder = URLEncoder.encode(filename, "utf-8");
filenameEncoder = filenameEncoder.replace("+", " ");
System.out.println(filenameEncoder + "---");
} else if (agent.contains("Firefox")) {
// 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filenameEncoder = "=?utf-8?B?"
+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
System.out.println(filenameEncoder);
} else {
// 其它浏览器
filenameEncoder = URLEncoder.encode(filename, "utf-8");
System.out.println(filenameEncoder);
}