1.第一种
// 得到要下载的文件
File file3 = new File(newPath);
// 得到要下载的文件名
String fileName = file3.getName(); // 2323928392489-美人鱼.avi
fileName = new String(fileName.getBytes("iso8859-1"), "UTF-8");
// 如果文件不存在
if (!file3.exists()) {
request.setAttribute("message", "您要下载的资源已被删除!!");
request.getRequestDispatcher("/message.jsp").forward(request,
response);
return;
}
// 设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode(fileName, "UTF-8"));
// 读取要下载的文件,保存到文件输入流
FileInputStream in = new FileInputStream(file3);
// 创建输出流
OutputStream out = response.getOutputStream();
// 创建缓冲区
byte buffer[] = new byte[1024];
int len = 0;
// 循环将输入流中的内容读取到缓冲区当中
while ((len = in.read(buffer)) > 0) {
// 输出缓冲区的内容到浏览器,实现文件下载
out.write(buffer, 0, len);
}
// 关闭文件输入流
in.close();
// 关闭输出流
out.close();
2.第二种
File file = new File(filePath);
if(file != null && file.exists()){
try{
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header, 汉字要转义
String fileNameEncoded = new String(filename.getBytes(), "ISO-8859-1");
response.addHeader("Content-Disposition", "attachment;filename=" + fileNameEncoded);
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();
response.setContentType("text/html; charset=utf-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache, must-revalidate");
response.getWriter().write(ex.getMessage());
response.getWriter().flush();
response.getWriter().close();
}
}