// 得到要下载的文件
File file = new File(filename);
// 如果文件不存在
if (!file.exists()) {
return;
}
// 处理文件名
String realname = af.getName();
String agent = (String)request.getHeader("USER-AGENT");
if(agent != null && agent.toLowerCase().indexOf("firefox") > 0)//火狐浏览器下采用base64编码
{
realname = "=?UTF-8?B?" + (new String(Base64.encodeBase64(realname.getBytes("UTF-8")))) + "?=";
}
else
{
realname = java.net.URLEncoder.encode(realname, "UTF-8");
}
// 设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition", "attachment;filename=" + realname);
// 读取要下载的文件,保存到文件输入流
FileInputStream in = new FileInputStream(af.getSavepath());
// 创建输出流
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();