|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
import
java.io.BufferedInputStream;
import
java.io.BufferedOutputStream;
import
java.io.ByteArrayOutputStream;
import
java.io.FileInputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.OutputStream;
import
java.io.PrintWriter;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
public
class
Downloads
extends
HttpServlet {
private
static
final
long
serialVersionUID = 1L;
// 字符编码
private
final
String ENCODING =
"GB2312"
;
// 内容类型
private
final
String CONTENT_TYPE =
"text/html;charset=gb2312"
;
// 要下载的文件存放的路径
private
String downloadfiledir =
"C:\\Users\\786108\\Downloads\\apache-tomcat-7.0.41\\webapps\\uploadFile\\upload\\"
;
public
void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
// 设置request对象的字符编码
request.setCharacterEncoding(ENCODING);
// 从request中取出要下载文件的名字
String filename = request.getParameter(
"filename"
);
// 判断传输过来的filename是否合法
if
(filename ==
null
|| filename.trim().equals(
""
)) {
// 设置response对象的ContentType
response.setContentType(CONTENT_TYPE);
// 输出错误信息
PrintWriter out = response.getWriter();
out.println(
"<font color=red>输入的文件名无效!</font>"
);
out.close();
}
else
{
// 下载文件的完整路径名
String fullfilename = downloadfiledir + filename;
System.out.println(
"下载文件:"
+ fullfilename);
// 根据文件的类型设置response对象的ContentType
String contentType = getServletContext().getMimeType(fullfilename);
if
(contentType ==
null
)
contentType =
"application/octet-stream"
;
response.setContentType(contentType);
// 设置response的头信息
response.setHeader(
"Content-disposition"
,
"attachment;filename=\""
+ filename +
"\""
);
InputStream is =
null
;
OutputStream os =
null
;
try
{
is =
new
BufferedInputStream(
new
FileInputStream(fullfilename));
// 定义输出字节流
ByteArrayOutputStream baos =
new
ByteArrayOutputStream();
// 定义response的输出流
os =
new
BufferedOutputStream(response.getOutputStream());
// 定义buffer
byte
[] buffer =
new
byte
[
4
*
1024
];
// 4k Buffer
int
read =
0
;
// 从文件中读入数据并写到输出字节流中
while
((read = is.read(buffer)) != -
1
) {
baos.write(buffer,
0
, read);
}
// 将输出字节流写到response的输出流中
os.write(baos.toByteArray());
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
// 关闭输出字节流和response输出流
os.close();
is.close();
}
}
}
public
void
doPost(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
// 调用doGet()方法
doGet(request, response);
}
}
|
本文转自 拖鞋崽 51CTO博客,原文链接:http://blog.51cto.com/1992mrwang/1243222
版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任