今天在學(xué)習(xí)使用struts2進(jìn)行文件的upload和download的時候遇到了許多問題框仔。
總結(jié)如下:
- 文件上傳臨時的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 (拒絕訪問。)
這個問題是由于我把上傳的臨時目錄設(shè)在了c:\ 根目錄 术裸,導(dǎo)致無法訪問枯跑。
- 解決辦法:
- 在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 (系統(tǒng)找不到指定的路徑庸诱。)java.io.FileNotFoundException: C:\JavaEE\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\upload\upload\FiLiLEiW9MGfa_vazxbtuobbnEth.jpg (系統(tǒng)找不到指定的路徑。)
- 解決辦法:
我用的是ServletActionContext.getServletContext().getRealPath()
方法獲取絕對路徑晤揣,只要在工程目錄下新建upload文件夾就可解決桥爽。
- inputName 不匹配問題
由于參考了許多網(wǎng)上的例子,導(dǎo)致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()方法名一致碉渡。