目录
1,将文件用输入流包装
InputStream inputStream = new FileInputStream(filePath+fileName);
2,获取response中的输出流
BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
3,设置浏览器响应的相关头
response.setContentType("application/doc");
//通知浏览器,以附件的形式下载而不是直接打开。
response.addHeader("Content-Disposition","attachment;filename="+fileName);
4,根据浏览器,对文件名编码,避免下载的时候,出现乱码
final String userAgent = request.getHeader("USER-AGENT");
if(StringUtils.contains(userAgent, "MSIE")){//IE浏览器
fileName = URLEncoder.encode(fileName,"UTF-8");
}else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
fileName = new String(fileName.getBytes(), "ISO8859-1");
}else{
fileName = URLEncoder.encode(fileName,"UTF-8");//其他浏览器
}
5,开流准备下载
byte[] car = new byte[1024];
int L;
while((L = inputStream.read(car)) != -1){
if( car.length != 0) {
outputStream.write(car,0,L);
}
}
if(outputStream!= null) {
outputStream.flush();
outputStream.close();
}