public
static
void
download(String path, HttpServletResponse response)
throws
Exception {
try
{
File file =
new
File(path);
if
(file.exists()) {
String filename = file.getName();
InputStream fis =
new
BufferedInputStream(
new
FileInputStream( file));
response.reset();
response.setContentType(
"application/x-download"
);
response.addHeader(
"Content-Disposition"
,
"attachment;filename="
+
new
String(filename.getBytes(),
"iso-8859-1"
));
response.addHeader(
"Content-Length"
,
""
+ file.length());
OutputStream toClient =
new
BufferedOutputStream(response.getOutputStream());
response.setContentType(
"application/octet-stream"
);
byte
[] buffer =
new
byte
[
1024
*
1024
*
4
];
int
i = -
1
;
while
((i = fis.read(buffer)) != -
1
) {
toClient.write(buffer,
0
, i);
}
fis.close();
toClient.flush();
toClient.close();
try
{
response.wait();
}
catch
(InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else
{
PrintWriter out = response.getWriter();
out.print(
"<script>"
);
out.print(
"alert(\"not find the file\")"
);
out.print(
"</script>"
);
}
}
catch
(IOException ex) {
PrintWriter out = response.getWriter();
out.print(
"<script>"
);
out.print(
"alert(\"not find the file\")"
);
out.print(
"</script>"
);
}
注意:以下写法是一次读取大文件会内存溢出,参考上面正确代码
byte
[] buffer =
new
byte
[fis.available()];
fis.read(buffer);