原文連接:http://www.faceye.net/search/143092.htmlhtml
轉自:web
1、struts2上傳單個文件apache
第一步:確保在WEB-INF/lib在commons-fileupload-x.x.x.jar、commons-io-x.x.x.jar兩個jar文件。這兩個文件能夠從struts2下載文件中的lib中找到,或者到http://commons.apache.org/下載。數組
第二步:把form表的enctype設置爲:"multipart/form-data",method設置成"post"以下:瀏覽器
- <form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
- <input type="file" name="uploadFile">
- </form>
第三步:在Action類中添加如下屬性,action類的代碼以下所示:
- import org.apache.commons.io.FileUtils;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.ActionContext;
-
- public class TestAction {
- private File uploadFile;
-
- private String uploadFileContentType;
- private String uploadFileFileName;
-
- public File getUploadFile() {
- return uploadFile;
- }
-
- public void setUploadFile(File uploadFile) {
- this.uploadFile = uploadFile;
- }
-
- public String getUploadFileContentType() {
- return uploadFileContentType;
- }
-
- public void setUploadFileContentType(String uploadFileContentType) {
- this.uploadFileContentType = uploadFileContentType;
- }
-
- public String getUploadFileFileName() {
- return uploadFileFileName;
- }
-
- public void setUploadFileFileName(String uploadFileFileName) {
- this.uploadFileFileName = uploadFileFileName;
- }
-
- public String execute() throws Exception {
- String realPath = ServletActionContext.getServletContext().getRealPath("/images");
- System.out.println(realPath);
- if(uploadFile !=null ){
- File destFile = new File(new File(realPath), uploadFileFileName);
- if(!destFile.getParentFile().exists())
- destFile.getParentFile().mkdirs();
-
- FileUtils.copyFile(uploadFile, destFile);
- ActionContext.getContext().put("message", "文件上傳成功!");
- }
- return "success";
- }
- }
form.jsp頁面的代碼以下所示:
- <body>
- <form action="${pageContext.request.contextPath }/demo/test.action" method="post" enctype="multipart/form-data">
- 文件:<input type="file" name="uploadFile"></input>
- <input type="submit" name="submit" value="上傳"></input>
- </form>
- </body>
代碼${pageContext.request.contextPath }等於<%=request.getContextPath() %>。app
result.jsp頁面的代碼以下:eclipse
- <body>
- 文件類型:${uploadFileContentType }<br>
- ${uploadFileFileName} ${message}
- </body>
本人 進行測試,發現此時只要上傳的文件不要超過2M,均可以順利上傳成功。上傳完成後會返回文件的文件名等信息。以下所示:socket
文件類型:application/octet-streamjsp
desktop.ini 文件上傳成功!post
在應用程序部署的文件夾下會產生一個images文件夾,在此文件夾下會有一個desktop.ini文件。
同進在控制檯打印了以下的信息,說明上傳時產生的臨時文件刪除成功:
2010-11-12 14:52:59 com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
信息: Removing file uploadFile D:\workspace\eclipsespace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\struts_helloworld\upload__43a41dcc_12c3ec6e75a__8000_00000002.tmp
但要是我上傳一個大於2M的文件,就會上傳失敗,控制檯打印的信息以下所示:
警告: Unable to parse request
org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (3018061) exceeds the configured maximum (2097152)
。。。
警告: the request was rejected because its size (3018061) exceeds the configured maximum (2097152)
這是由於struts2一次上傳文件時默認的總大小是2097152B,因此在默認狀況下上傳的文件不能大於2M。
此時在struts.xml文件中,增長代碼<constant name="struts.multipart.maxSize" value="10701096"/> ,
將它的文件上傳限制設爲10M左右,上面的文件就能正常上傳了。配置文件以下所示:
- <struts>
- <constant name="struts.multipart.maxSize" value="10701096"/>
- <package name="myDemo" namespace="/demo" extends="struts-default">
- <action name="test" class="demo.action.TestAction">
- <result>/WEB-INF/jsp/result.jsp</result>
- </action>
- </package>
- </struts>
注意:struts2中的文件限制參數<constant name="struts.multipart.maxSize" value="10701096"/>並非能夠無限制的改大的,通常不能太大,以不超過10M的文件。這是由於web的性質決定的。基於web上傳的文件都不能太大,若是要上傳更大的文件,能夠考慮使用瀏覽器插件(實際上是一種通信軟件),相似於迅雷這樣子的軟件。這些軟件都是基於socket來上傳文件的。
2、struts2上傳多文件
<1> 在form表單中的有多個file類型的input節點
- <body>
- <form action="${pageContext.request.contextPath }/demo/test.action" method="post" enctype="multipart/form-data">
- 文件1:<input type="file" name="uploadFiles"></input>
- 文件2:<input type="file" name="uploadFiles"></input>
- 文件3:<input type="file" name="uploadFiles"></input>
- <input type="submit" name="submit" value="上傳"></input>
- </form>
- </body>
<2>action類以下所示:
- public class TestAction {
-
-
- private File[] uploadFiles;
-
- private String[] uploadFilesContentType;
- private String[] uploadFilesFileName;
-
-
- public String execute() throws Exception {
- String realPath = ServletActionContext.getServletContext().getRealPath(
- "/images");
- File file = new File(realPath);
- if (!file.exists())
- file.mkdirs();
- if (uploadFiles != null) {
- for (int i = 0; i < uploadFiles.length; i++) {
- File uploadFile = uploadFiles[i];
- FileUtils.copyFile(uploadFile, new File(file,
- uploadFilesFileName[i]));
- }
- ActionContext.getContext().put("message", "文件上傳成功!");
- }
- return "success";
- }
- }
原文連接:http://www.faceye.net/search/143092.html