@RequestMapping("annlReadme2.html")
public String annlReadme2(ModelMap modelMap, HttpServletRequest request,HttpServletResponse response) {
String fileName="222.doc";
String showName="111.doc";
BufferedInputStream in = null;
BufferedOutputStream out = null;
String rootpath = request.getSession().getServletContext().getRealPath("/");
try {
showName= new String(showName.getBytes("gb2312"), "ISO8859-1" );
File f = new File(rootpath + "/download/" + fileName);
response.setContentType("application/msword");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + showName);
response.setHeader("Content-Length", String.valueOf(f.length()));
in = new BufferedInputStream(new FileInputStream(f));
out = new BufferedOutputStream(response.getOutputStream());
byte[] data = new byte[1024];
int len = 0;
while (-1 != (len=in.read(data, 0, data.length))) {
out.write(data, 0, len);
}
} catch (Exception e) {
response.reset();
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}catch (Exception e){
System.out.print(" error");
}
}
return null;
}
下面是文件的路径存放点
关键核心代码
String url = request.getSession().getServletContext().getRealPath("download/");
上面的获取到了文件存放的位置
OutputStream outputStream = null;
try {
File file = new File(bookRouteURL);//bookRoute文件路径
String fileName = file.getName();
//流形式下载文件
InputStream inputStream = new BufferedInputStream(new FileInputStream(bookRouteURL));//bookRoute文件路径
byte[] buffer = new byte[inputStream.available()];//返回可以读取的字节数的估计值
inputStream.read(buffer);
inputStream.close();
// 清空response
response.reset();
//根据浏览器类型选择转码
if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0){
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");//firefox浏览器
} else {
fileName = URLEncoder.encode(fileName, "UTF-8");
}
//设置header
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
response.addHeader("Content-Length", "" + file.length());
response.setContentType("application/octet-stream");//二进制流,不知道下载文件类型
outputStream = new BufferedOutputStream(response.getOutputStream());
outputStream.write(buffer);
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流
if (outputStream != null){
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}