为action中的inputPath属性初始化值 -->
<param name="inputPath">/store/</param>
<result type="stream"> <!-- 指定类型stream 以流形式进行传输 ,注意后面的param是result的子元素-->
<param name="contentType">image/gif</param> <!--指定文件内容类型和互联网MIME标准中的规定类型一致,
例如text/plain代表纯文本,text/xml表示XML,image/gif
代表GIF图片,image/jpeg代表JPG图片 -->
<param name="contentDisposition">attachment;filename="123.gif"</param>
<!--指定文件以附件形式弹出下载对话框;filename="123.gif" 指定下载对话框中显示的文件名称;
文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。
如果直接写filename="123.gif",默认情况是代表inline,浏览器会尝试自动打开它,等价于这样的写法:inline; filename="123.gif"-->
<param name="bufferSize">4096</param> <!--指定下载缓冲区的大小-->
</result>
</action>
问题就出在不应该给action指定method属性,因为action配置上method属性后,struts2默认会把 ByteArrayInputStream强制转成String类型。那要在哪里配置哪个方法来执行下载操作,返回下载文件流。其实<param name="inputName">targetFile</param>
就已经指定了DownAction中的getTargetFile()返回下载文件流。所以我们只要去掉action的method属性,然后添加<param name="inputName">***</param>
,