Java文件下载的几种方式
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
|
public
HttpServletResponse download(String path, HttpServletResponse response) {
try
{
// path是指欲下载的文件的路径。
File file =
new
File(path);
// 取得文件名。
String filename = file.getName();
// 取得文件的后缀名。
String ext = filename.substring(filename.lastIndexOf(
"."
) +
1
).toUpperCase();
// 以流的形式下载文件。
InputStream fis =
new
BufferedInputStream(
new
FileInputStream(path));
byte
[] buffer =
new
byte
[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.addHeader(
"Content-Disposition"
,
"attachment;filename="
+
new
String(filename.getBytes()));
response.addHeader(
"Content-Length"
,
""
+ file.length());
OutputStream toClient =
new
BufferedOutputStream(response.getOutputStream());
response.setContentType(
"application/octet-stream"
);
toClient.write(buffer);
toClient.flush();
toClient.close();
}
catch
(IOException ex) {
ex.printStackTrace();
}
return
response;
}
public
void
downloadLocal(HttpServletResponse response)
throws
FileNotFoundException {
// 下载本地文件
String fileName =
"Operator.doc"
.toString();
// 文件的默认保存名
// 读到流中
InputStream inStream =
new
FileInputStream(
"c:/Operator.doc"
);
// 文件的存放路径
// 设置输出的格式
response.reset();
response.setContentType(
"bin"
);
response.addHeader(
"Content-Disposition"
,
"attachment; filename=\""
+ fileName +
"\""
);
// 循环取出流中的数据
byte
[] b =
new
byte
[
100
];
int
len;
try
{
while
((len = inStream.read(b)) >
0
)
response.getOutputStream().write(b,
0
, len);
inStream.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
public
void
downloadNet(HttpServletResponse response)
throws
MalformedURLException {
// 下载网络文件
int
bytesum =
0
;
int
byteread =
0
;
URL url =
new
URL(
"windine.blogdriver.com/logo.gif"
);
try
{
URLConnection conn = url.openConnection();
InputStream inStream = conn.getInputStream();
FileOutputStream fs =
new
FileOutputStream(
"c:/abc.gif"
);
byte
[] buffer =
new
byte
[
1204
];
int
length;
while
((byteread = inStream.read(buffer)) != -
1
) {
bytesum += byteread;
System.out.println(bytesum);
fs.write(buffer,
0
, byteread);
}
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
}
|
//支持在线打开文件的一种方式
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
|
public
void
downLoad(String filePath, HttpServletResponse response,
boolean
isOnLine)
throws
Exception {
File f =
new
File(filePath);
if
(!f.exists()) {
response.sendError(
404
,
"File not found!"
);
return
;
}
BufferedInputStream br =
new
BufferedInputStream(
new
FileInputStream(f));
byte
[] buf =
new
byte
[
1024
];
int
len =
0
;
response.reset();
// 非常重要
if
(isOnLine) {
// 在线打开方式
URL u =
new
URL(
"file:///"
+ filePath);
response.setContentType(u.openConnection().getContentType());
response.setHeader(
"Content-Disposition"
,
"inline; filename="
+ f.getName());
// 文件名应该编码成UTF-8
}
else
{
// 纯下载方式
response.setContentType(
"application/x-msdownload"
);
response.setHeader(
"Content-Disposition"
,
"attachment; filename="
+ f.getName());
}
OutputStream out = response.getOutputStream();
while
((len = br.read(buf)) >
0
)
out.write(buf,
0
, len);
br.close();
out.close();
}
|