Java中用Struts2做下载功能遇到的问题

来源:互联网 发布:熊猫tv小葫芦数据 编辑:程序博客网 时间:2024/06/05 19:12

用Struts2框架做下载时,一直报异常

java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [inputStream] 

action配置如下:

<action name="downFileAction" class="edu.fileManager.Action.DownFileAction"><result name="success" type="stream"><param name="contentType">     application/octet-stream;charset=ISO8859-1    </param><param name="inputName">inputStream</param><param name="contentDisposition">attachment;filename="${downloadFileName}"</param><param name="bufferSize">40960</param></result></action>

经查原因在于action的java文件中的getInputStream()方法不能正确返回InputStream流,ServletActionContext.getServletContext().getResourceAsStream(String path)获取到的返回为null,文件名path存在问题。

ServletContext. getResourceAsStream(String path):默认从当前的WebAPP根目录下取资源,Tomcat下path是否以’/'开头无所谓。

public InputStream getInputStream() throws FileNotFoundException{DB mysql = new DB();String filename = mysql.returnFile(request, "fileName");return ServletActionContext.getServletContext().getResourceAsStream("save/"+filename);}
将path更改为("/save/"+filename)或("save/"+filename)后问题解决。

还可以直接使用FileInputStream(String path)方法获取InputStream,此处的path必须是绝对路径。

public InputStream getInputStream() throws FileNotFoundException{DB mysql = new DB();String realpath = mysql.returnFile(request, "filePath");InputStream in = new FileInputStream(realpath);return in;}
此处的realpath为绝对路径。

文件目录结构如下图

阅读全文
0 0
原创粉丝点击