// Spring这里是通过实现ServletContextAware接口来注入ServletContext对象
private ServletContext servletContext;
@RequestMapping("/download")
public void download(HttpServletResponse response) {
InputStream ins = null;
BufferedInputStream bins = null;
OutputStream outs = null;
BufferedOutputStream bouts = null;
try {
String path = servletContext.getRealPath("/");
File file = new File(path + "download/" + "request.zip");
String finalZipName = "request.zip";
ins = new FileInputStream(file);
bins = new BufferedInputStream(ins);// 放到缓冲流里面
outs = response.getOutputStream();// 获取文件输出IO流
bouts = new BufferedOutputStream(outs);
response.setContentType("application/x-download");// 设置response内容的类型
response.setHeader("Content-disposition", "attachment;filename="
+ URLEncoder.encode(finalZipName, "UTF-8"));// 设置头部信息
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {
bouts.write(buffer, 0, bytesRead);
}
bouts.flush();
// System.out.println(bouts.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ins != null) {
try {
ins.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bins != null) {
try {
bins.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outs != null) {
try {
outs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bouts != null) {
try {
bouts.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void setServletContext(ServletContext servletContext) {
// TODO Auto-generated method stub
this.servletContext = servletContext;
}