我已使用以下代码在Struts2中成功上传了一个文件:
String filePath = servletRequest.getSession().getServletContext().getRealPath("/") + "WEB-INF\\files\\";
fileToCreate = new File(filePath, getUserDocFileName());
FileUtils.copyFile(this.userDoc, fileToCreate);
问题是该文件被复制到\ build \ web \ WEB-INF \ files文件夹中。现在,当我尝试使用结果类型流检索文件时:
String filePath = servletRequest.getSession().getServletContext().getRealPath("/") + "WEB-INF\\files\\";
File file = new File(filePath + getFileName());
try {
inputStream = new DataInputStream(new FileInputStream(file));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
<action name="loadFile" class="com.app.Controller" method="loadFile">
<result name="success" type="stream">
<param name="contentType">${fileType}</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">inline;filename="${fileName}"</param>
<param name="bufferSize">1024</param>
</result>
<interceptor-ref name="defaultStack"/>
</action>
我得到以下异常:
java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [inputStream] in the invocation stack. Check the <param name="inputName"> tag specified for this action.
有关此问题的任何帮助?
FileUtils.copyFile
是否与设置struts.multipart.saveDir
属性相同?
如何将文件放在WEB-INF文件夹中,而不是放在build文件夹中?
每当我再次构建项目时,都不应删除文件。我想稍后将它部署到OpenShift。
答案 0 :(得分:0)
尝试从servlet上下文中获取它
InputStream is = ServletActionContext.getServletContext().getResourceAsStream("/WEB-INF/files/" + fileName);