파일 다운로드
클라이언트 브라우저는 서버에서 파일을 다운로드합니다. 사실, 하이퍼 링크 주소는 서버 측 파일 경로에 연결되어있는
등 사진, 비디오, 오디오, 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();
}