文件的下载
客户端浏览器从服务器下载文件。其实就是超链接,连接的地址是服务器端文件的路径
存在一个问题:浏览器能识别的文件,比如图片、视频、音频、pdf、txt等,会直接打开。
解决方案:编写服务器端代码,告诉浏览器,无论文件时什么类型的,都不让浏览器打开,让浏览器以附件的方式打开,直接下载。
以下代码是设置响应头:服务器指导浏览器,把文件以附件的形式下载
内容描述 附件
response.setHeader("Content-Disposition","attachment;filename=文件名");
代码实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--
超链接:文件下载
连接的路径就是服务器文件的地址
-->
<a href="/web03/download/a.flv">a.flv</a><br/>
<a href="/web03/download/a.jpg">a.jpg</a><br/>
<a href="/web03/download/a.mp3">a.mp3</a><br/>
<a href="/web03/download/a.mp4">a.mp4</a><br/>
<a href="/web03/download/a.txt">a.txt</a><br/>
<a href="/web03/download/a.zip">a.zip</a><br/>
<a href="/web03/download/a.pdf">a.pdf</a><br/>
<hr/>
<!--
连接的地址,不在是文件的地址,连接某一个Servlet
-->
<a href="/web03/download">a.jpg</a><br/>
<!--
http://localhost:8080/web03/download.html?a=%E4%BD%A0%E5%A5%BD#
-->
<form action="#" method="get">
<input type="text" name="a"/><input type="submit"/>
</form>
</body>
</html>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 编写程序,通知浏览器请你下载,不要打开
* 指导浏览器干什么,响应头
* 浏览器下载是HTTP协议规定
*/
String agent = request.getHeader("User-Agent");
String filename="美女.jpg";
if (agent.contains("MSIE")) {
// IE浏览器
filename = URLEncoder.encode(filename, "utf-8");
filename = filename.replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
} else {
// 其它浏览器
filename = URLEncoder.encode(filename, "utf-8");
}
//Content-Disposition 内容描述 attachment 附件
response.setHeader("Content-Disposition","attachment;filename="+filename);
String aFile = getServletContext().getRealPath("download/a.jpg");
FileInputStream fis = new FileInputStream(aFile);
OutputStream out = response.getOutputStream();
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes))!=-1){
out.write(bytes,0,len);
}
fis.close();
}