1、struts2实现预览
action中代码:
private String downloadFileName; public InputStream getDownloadFile() throws Exception { Map<String,String[]> param = super.getParameter(); String imageFileId = ((String[])param.get("fileId"))[0]; Integer fileId = new Integer( imageFileId ); //根据fileId去库中查询文件名称 String filename = activityService.getImageFileName(fileId).getImageFile(); downloadFileName = filename; this.setDownloadFileName(downloadFileName); String fullPath = MisConst.IMAGE_FILE_PATH + "activity"+"/" + downloadFileName; File file = new File( fullPath ); FileInputStream fis = null; try { fis = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } return fis; } /** * 下载附件 * @return */ public String download() { return SUCCESS; }
?xml中配置:
<action name="download" class="activityAction" method="download"> <result name="success" type="stream"> <param name="contentType">application/octet-stream </param> <param name="contentDisposition">filename=${downloadFileName}</param> <param name="inputName">downloadFile</param>//downloadFile要和action中getDownloadFile() 方法名一致 </result> </action>
?2、真正的下载
action:
/** * 下载 * @return * @throws Exception */ public String download() throws Exception{ FileInputStream in=null; OutputStream out=null; try{ String filename = ServletActionContext.getRequest().getParameter("filename"); filename = URLDecoder.decode(filename.trim(), "utf-8"); String filepath = ServletActionContext.getServletContext().getRealPath("\\upload\\takingFile")+"\\"+filename; File file = new File(filepath); byte[] buff = new byte[1024]; in = new FileInputStream(file); HttpServletResponse response=ServletActionContext.getResponse(); response.reset(); out = response.getOutputStream(); response.setContentType("application/x-download"); response.addHeader("Content-Disposition", "attachment;filename=\"" + URLEncoder.encode(file.getName(), "utf-8")+"\""); response.setHeader("Connection", "close"); while (true) { int len = in.read(buff); if (len != -1) { out.write(buff, 0, len); out.flush(); } else { break; } } }catch (Exception e) { e.printStackTrace(); }finally{ if(in!=null){ in.close(); } if(out!=null){ out.close(); } } return null; }
?jsp:
function downLoad(filename){ var filename = filename; var data="?filename="+encodeURI(encodeURI(filename));//注意两次转码,否则中文会乱码 var url ="download.action"; window.open(encodeURI(url)+data); }
?
?