利用struts2实现文件的导出功能
程序员文章站
2022-05-31 10:41:31
...
今天在开发一个文件导出的功能,原本想自已写一个就ok了,结果写了将近一天,查了各种资料都没能实现,最后还是在同事的帮助下,利用struts2的文件上传下载插件完成的,下面我就把通过struts2实现的文件的导出功能粘贴出来,供下次使用:
1、 首先,我要实现的功能流程:
1)系统初始化加载linux的系统日志,然后将日志内容展示在页面中。
2)点击页面中的“导出日志”按钮,将页面中的日志内容重新传回到action中(原因:如果再次向服务器要数据的话,有可能会导致导出的日志内容跟页面中看到的日志内容有差别)。
3)利用struts2的文件下载功能,实现文件的导出效果(可以自己选择导出文件的保存路径)。
2、具体实现代码:
1)加载并在页面展示系统日志的代码略。
2)文件导出:
a.需要的jar包,出了struts2的几个核心jar包外,必须添加commons-io-*.jar、common-fileupload-*.jar这两个包。
b.action中代码:
// 用于接收需要下载的流 public InputStream getInputStream() throws UnsupportedEncodingException { HttpServletRequest request = ServletActionContext.getRequest(); String content = request.getParameter("content"); ByteArrayInputStream in = new ByteArrayInputStream(content.getBytes()); return in; } public String exportFile() { return "success"; }
c.struts.xml配置文件中代码:
<action name="exportFile" class="SyslogMessageAction" method="exportFile"> <result name="success" type="stream"> <!--设置文件类型--> <param name="contentType">application/octet-stream</param> <!--下载文件流--> <param name="inputName">inputStream</param> <!--添加参数,即就是下载的名称--> <param name="contentDisposition">attachment;fileName="sys_log.txt"</param> <!--缓存--> <param name="bufferSize">4096</param> </result> </action>
d.在页面中调用(仅有js函数一个):
function exportSysLog(){ var content = $("#syslog").val();//页面中显示的文字内容 window.location.href = "exportFile.action?content="+content;//调用文件导出的方法 } 在页面中调用这个函数即可。
至此,便完成了文件的导出操作。