public ActionForward downloadFile(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
long id=ParamUtils.getLongParameter(request, "id", 0l);
try {
HqjcDepaAttach annex=(HqjcDepaAttachImpl)depaAttachManager.get(id);
//String fileName = this.currentTime();
String filePath = request.getRealPath("/temp")+annex.getAccachValue();
File file = new File(filePath);
byte[] bytes = annex.getAttachFile();
FileOutputStream fos = new FileOutputStream(file);
fos.write(bytes);
if(fos != null){
fos.flush();
fos.close();
}
String suffix=annex.getAccachValue().substring(annex.getAccachValue().indexOf(".")+1).toUpperCase();
String dataType="application/octet-stream";
if("BMP".equals(suffix)){
dataType="image/bmp";
}else if("GIF".equals(suffix)){
dataType="image/gif";
}else if("JPEG".equals(suffix)||"JPG".equals(suffix)){
dataType="image/jpeg";
}else if("TXT".equals(suffix)){
dataType="text/plain";
}else if("PDF".equals(suffix)){
dataType="application/pdf";
}else if("DOC".equals(suffix)){
dataType="application/msword";
}else if("XLS".equals(suffix)){
dataType="application/vnd.ms-excel";
}else if("PPT".equals(suffix)){
dataType="application/vnd.ms-powerpoint";
}else if("HTML".equals(suffix)||"HTM".equals(suffix)){
dataType="text/html";
}else if("XML".equals(suffix)){
dataType="text/xml";
}
// 现在用户对该文档拥有下载权限 以字节流的形式下载文件
response.setContentType(dataType); // 设置头,浏览器不认识就提示下载
response.setHeader("Content-Disposition", "attachment; filename="+URLEncoder.encode(annex.getAccachValue(), "UTF-8"));
// 以流的形式写出文件
FileInputStream bis = new FileInputStream(file);//以流的形式写出文件
OutputStream bos = response.getOutputStream();
byte[] buff = new byte[1024];
int readCount = 0;
readCount = bis.read(buff);
while (readCount != -1){
bos.write(buff, 0, readCount);
readCount = bis.read(buff);
}
if (bis != null) bis.close();
if (bos != null) bos.close();
//下载完毕,给浏览器发给完毕的头
response.setStatus(HttpServletResponse.SC_OK);
response.flushBuffer();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}