頁面效果 實現步驟 1.Jsp頁面要求 2.VO對象中添加非持久化javabean屬性 3.兩種文件下載方式 方式一:不使用struts2提供的文件下載(普通方式) Action類中添加方法: 方式二:使用struts2提供的文件下載 第一步:配置struts.xml 第二步:VO對象中,添加Inp ...
頁面效果
實現步驟
1.Jsp頁面要求
<TD class="ta_01" align="center" bgColor="#f5fafe">附件(下載):</TD> <TD class="ta_01" bgColor="#ffffff" colSpan="3"> <s:if test="elecUserFiles!=null && elecUserFiles.size()>0"> <s:iterator value="elecUserFiles"> <a href="#" onclick="openWindow('${pageContext.request.contextPath }/system/elecUserAction_download.do?fileID=<s:property value="fileID"/>','700','400');"> <s:property value="fileName"/> </a> <s:date name="progressTime" format="yyyy-MM-dd HH:mm:ss"/> <br> </s:iterator> </s:if> </TD>
2.VO對象中添加非持久化javabean屬性
//附件ID private String fileID; public String getFileID() { return fileID; } public void setFileID(String fileID) { this.fileID = fileID; }
3.兩種文件下載方式
方式一:不使用struts2提供的文件下載(普通方式)
Action類中添加方法:
/** * @Name: download * @Description: 文件下載(普通方式) * @Parameters: 無 * @Return: 無 */ public String download(){ try { //1.獲取文件ID String fileID = elecUser.getFileID(); //2.根據文件ID,查詢附件表,獲取路徑path ElecUserFile elecUserFile = elecUserService.findUserfileByID(fileID); //(1)獲取路徑 String path = ServletActionContext.getServletContext().getRealPath("") + elecUserFile.getFileURL(); //(2)獲取文件名 String fileName = elecUserFile.getFileName(); //(3)可能出現中文,解決中文亂碼問題 fileName=new String(fileName.getBytes("gbk"),"iso8859-1"); //(4)填寫下載文件的頭部信息 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=" + fileName); //3.使用路徑path,查找到對應的文件,轉化成InputStream FileInputStream fileInputStream = new FileInputStream(new File(path)); //4.從響應對象response中獲取輸出流 OutputStream outputStream = response.getOutputStream(); //5.將輸入流數據讀出寫到輸出流 byte[] buf=new byte[1024]; int length=0; while((length=fileInputStream.read(buf))!=-1){ outputStream.write(buf, 0, length); } outputStream.close(); fileInputStream.close(); } catch (Exception e) { e.printStackTrace(); } return NONE; }
方式二:使用struts2提供的文件下載
第一步:配置struts.xml
<result name="download" type="stream"> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename="${#request.fileName}"</param> <param name="bufferSize">1024</param> </result>
第二步:VO對象中,添加InputStream類型的屬性
在模型驅動的對象中,添加InputStream類型的屬性主要用來存放文件的輸入流,其中屬性名稱要與struts.xml中定義的inputName的值一致。
//文件下載的流的屬性 private InputStream inputStream; public InputStream getInputStream() { return inputStream;
} public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; }
第四步:Action類中添加代碼
/** * @Name: download * @Description: 文件下載(struts2的方式) * @Parameters: 無 * @Return: struts2的結果類型 */ public String download(){ try { //1.獲取文件ID String fileID = elecUser.getFileID(); //2.根據文件ID,查詢附件表,獲取路徑path ElecUserFile elecUserFile = elecUserService.findUserfileByID(fileID); //(1)獲取路徑 String path = ServletActionContext.getServletContext().getRealPath("") + elecUserFile.getFileURL(); //(2)獲取文件名 String fileName = elecUserFile.getFileName(); //(3)可能出現中文,解決中文亂碼問題 fileName=new String(fileName.getBytes("gbk"),"iso8859-1"); request.setAttribute("fileName", fileName); //3.使用路徑path,查找到對應的文件,轉化成InputStream FileInputStream fileInputStream = new FileInputStream(new File(path)); //4.與棧頂的inputStream關聯,將查詢的文件輸入流放置到模型驅動定義的inputStream屬性中,用來輸出文件 elecUser.setInputStream(fileInputStream); } catch (Exception e) { e.printStackTrace(); } return "download"; }