今天在学习使用struts2进行文件的upload和download的时候遇到了许多问题。
总结如下:
- 文件上传临时的tmp文件拒绝访问,错误如下:
2016-05-18 10:36:25,072 WARN [org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest] - Unable to parse request
org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. c:\upload0c89742b26a64ff1aebb19429fbf727000000002.tmp (拒绝访问。)
Caused by: java.io.FileNotFoundException: c:\upload0c89742b26a64ff1aebb19429fbf727000000002.tmp (拒绝访问。)
这个问题是由于我把上传的临时目录设在了c:\ 根目录 ,导致无法访问。
- 解决办法:
- 在c盘新建一个tmp文件夹
- 修改struts.xml
<!-- 上传过程中临时文件存放目录 --><constant name="struts.multipart.saveDir" value="C:\tmp\"></constant>
- 文件上传后,无法保存到指定路径。错误如下:
C:\JavaEE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\upload\2016-05-18 11:02:12,859 ERROR [org.apache.struts2.dispatcher.Dispatcher] - Exception occurred during processing request: C:\JavaEE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\upload\upload\FiLiLEiW9MGfa_vazxbtuobbnEth.jpg (系统找不到指定的路径。)java.io.FileNotFoundException: C:\JavaEE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\upload\upload\FiLiLEiW9MGfa_vazxbtuobbnEth.jpg (系统找不到指定的路径。)
- 解决办法:
我用的是ServletActionContext.getServletContext().getRealPath()
方法获取绝对路径,只要在工程目录下新建upload文件夹就可解决。
- inputName 不匹配问题
由于参考了许多网上的例子,导致struts.xml 和action中方法名不匹配
错误如下:
Apache Tomcat/7.0.65 - Error reportCan not find a java.io.InputStream with the name [inputStream] in the invocation stack. Check the tag specified for this action.
- 解决方法:
修改struts.xml中
<param name="inputName">NAME</param>
NAME要和download.action中的getDownload()方法名一致。