struts2 实现 下载整个文件夹

struts2 实现 下载整个文件夹,第1张

分析下,如果你要下载某个文件需要向服务器发送请求,然后会在客户端与服务器之间建立一个HTTP连接,服务器接收到你的请求后,向response中写入你要下载的内容,并且由于安全策略的原因,浏览器客户端每次下载文件都会d出保存对话框。

也就是说,如果你要下载文件夹下的所有文件,你就需要对所有文件都发送请求,并且挨个选择保存位置。

如果要解决上面的问题,你可以按照下面的方式做。

1、建立一个servlet(structs2下应该是action吧),用来接收用户的请求。

2、根据用户的请求,将要下载的内容使用org.apache.tools.zip包下的类进行打包(JDK下也有相应的ZIP处理的类,不过它对于中文的文件名处理有问题)。

注:构造ZipOutputStream时使用HttpServletResponse.getOutputStream()构造。这样向ZipOutputStream中写入的内容,客户端就能直接获取。

以上,希望对你的帮助,可以的话,请采纳。

这个异常并不影响程序的正常运行,主要原因是:服务器段已经在做写 *** 作了,只是客户端一接受就关闭了socket连接,tomcat会抛出ClientAbortException,所以只需要屏蔽这个异常即可,两种方式,在struts2中进行相关配置例如: <struts>

<!-- 下载文件的Action定义 -->

<action name="download" class="action.DownLoadAction">

<!-- 设置文件名参数,由页面上传入 -->

<param name="fileName"></param>

<result name="success" type="stream">

<!-- 下载文件类型定义 -->

<param name="contentType">text/plain</param>

<!-- 下载文件处理方法 -->

<param name="contentDisposition">

attachmentfilename="${downloadFileName}"

</param>

<!-- 下载文件输出流定义 -->

<param name="inputName">downloadFile</param>

</result>

<exception-mapping result="client-abort-exception" exception="org.apache.catalina.connector.ClientAbortException"></exception-mapping>

</action>

</struts>

<package name="default" extends="struts-default" abstract="true">

<global-results>

<result name="client-abort-exception">/abort.jsp</result>

</global-results>

</package>

其中 :<exception-mapping result="client-abort-exception" exception="org.apache.catalina.connector.ClientAbortException"></exception-mapping>

<result name="client-abort-exception">/abort.jsp</result>

含义就是截获异常发送到一个空页面。

另一种方法就是修改tomcat中有关此异常的jar包中的ClientAortException,忽略此异常,或者另进行处理,如果不用tomcat而是resin。那么resin有一个参数ignore-client-disconnect,直接设置一下即可,不需要做上述 *** 作。

<param name="contentType">application/octet-stream</param>

要是想知道所有文件的类型,可以在tomcat安装目录下的:conf目录下的web.xml文件里边,往下翻,全部的文件类型都在里边!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/11861178.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存