隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0

          導航

          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          公告

          關注我的新浪微博

          我的著作









          常用鏈接

          留言簿(126)

          我參與的團隊

          隨筆分類(818)

          隨筆檔案(310)

          文章分類(1)

          文章檔案(8)

          相冊

          ADSL、3G查詢

          CSDN

          eclipse

          ibm

          Java EE

          Linux

          Web

          云服務

          代理網站

          關注的網站

          協議

          喜歡的Blog

          國內廣告平臺

          圖書出版

          在線培訓

          開發工具

          微博客戶端

          手機鈴聲

          操作系統

          • ReactOS
          • 一個與windowXP/2003兼容的操作系統

          數學

          文件格式

          源碼資源

          移動(Mobile)

          編程語言

          英語學習

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1973742
          • 排名 - 6

          最新評論

          閱讀排行榜

          評論排行榜

          Struts2教程7:上傳任意多個文件

          本文為原創,如需轉載,請注明作者和出處,謝謝!

          上一篇:Struts2教程6:在Action類中獲得HttpServletResponse對象的四種方法


          一、上傳單個文件

              上傳文件是很多Web程序都具有的功能。在Struts1.x中已經提供了用于上傳文件的組件。而在Struts2中提供了一個更為容易操作的上傳文件組件。所不同的是,Struts1.x的上傳組件需要一個ActionForm來傳遞文件,而Struts2的上傳組件是一個攔截器(這個攔截器不用配置,是自動裝載的)。在本文中先介紹一下如何用struts2上傳單個文件,最后介紹一下用struts2上傳任意多個文件。

              要用Struts2實現上傳單個文件的功能非常容易實現,只要使用普通的Action即可。但為了獲得一些上傳文件的信息,如上傳文件名、上傳文件類型以及上傳文件的Stream對象,就需要按著一定規則來為Action類增加一些gettersetter方法。

              Struts2中,用于獲得和設置java.io.File對象(Struts2將文件上傳到臨時路徑,并使用java.io.File打開這個臨時文件)的方法是getUploadsetUpload。獲得和設置文件名的方法是getUploadFileNamesetUploadFileName,獲得和設置上傳文件內容類型的方法是getUploadContentTypesetUploadContentType。下面是用于上傳的動作類的完整代碼:


          package action;

          import java.io.*;
          import com.opensymphony.xwork2.ActionSupport;

          public class UploadAction extends ActionSupport 
          {
              
          private File upload;
              
          private String uploadFileName;
              
          private String uploadContentType;
              
              
          public String getUploadFileName()
              {
                  
          return uploadFileName;
              }

              
          public void setUploadFileName(String fileName)
              {
                  
          this.uploadFileName = fileName;
              }

              
          public File getUpload()
              {
                  
          return upload;
              }

              
          public void setUpload(File upload)
              {
                  
          this.upload = upload;
              }
              
          public void setUploadContentType(String contentType)
              {
                  
          this.uploadContentType=contentType;
              
              }
              
              
          public String getUploadContentType()
              {
                  
          return this.uploadContentType;
              }
              
          public String execute() throws Exception
              {   
                  java.io.InputStream is 
          = new java.io.FileInputStream(upload);
                  java.io.OutputStream os 
          = new java.io.FileOutputStream("d:\\upload\\" + uploadFileName);
                  
          byte buffer[] = new byte[8192];
                  
          int count = 0;
                  
          while((count = is.read(buffer)) > 0)
                  {
                      os.write(buffer, 
          0, count);
                  }
                  os.close();
                  is.close();
                  
          return SUCCESS;
              }
          }

              在execute方法中的實現代碼就很簡單了,只是從臨時文件復制到指定的路徑(在這里是d:\upload)中。上傳文件的臨時目錄的默認值是javax.servlet.context.tempdir的值,但可以通過struts.properties(和struts.xml在同一個目錄下)的struts.multipart.saveDir屬性設置。Struts2上傳文件的默認大小限制是2M2097152字節),也可以通過struts.properties文件中的struts.multipart.maxSize修改,如struts.multipart.maxSize=2048 表示一次上傳文件的總大小不能超過2K字節。

              下面的代碼是上傳文件的JSP頁面代碼


          <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
          <%@ taglib prefix="s" uri="/struts-tags"%>

          <html>
              
          <head>
                  
          <title>上傳單個文件</title>
              
          </head>

              
          <body>
                  
          <s:form action="upload" namespace="/test"
                      enctype
          ="multipart/form-data">
                      
          <s:file name="upload" label="輸入要上傳的文件名" />
                      
          <s:submit value="上傳" />
                  
          </s:form>

              
          </body>
          </html>

          也可以在success.jsp頁中通過<s:property>獲得文件的屬性文件名和文件內容類型),代碼如下

              <s:property value="uploadFileName"/>

          二、上傳任意多個文件

              Struts2中,上傳任意多個文件也非常容易實現。首先,要想上傳任意多個文件,需要在客戶端使用DOM技術生成任意多個<input type=”file” />標簽。name屬性值都相同。代碼如下:

          <html>
              
          <head>
                  
          <script language="javascript">

          function addComponent()
          {
                  
          var uploadHTML = document.createElement( "<input type='file'  name='upload'/>");
                  document.getElementById(
          "files").appendChild(uploadHTML);
                  uploadHTML 
          = document.createElement( "<p/>");
                  document.getElementById(
          "files").appendChild(uploadHTML);
          }
          </script>
              
          </head>
              
          <body>
                  
          <input type="button" onclick="addComponent();" value="添加文件" />
                  
          <br />
                  
          <form onsubmit="return true;" action="/struts2/test/upload.action"
                      method
          ="post" enctype="multipart/form-data">
                      
          <span id="files"> <input type='file' name='upload' />
                          
          </>
                      
          </span>
                      
          <input type="submit" value="上傳" />
                  
          </form>
              
          </body>

          </html>
               上面的javascript代碼可以生成任意多個<input type=’file’>標簽,name的值都為file(要注意的是,上面的javascript代碼只適合于IE瀏覽器,firefox等其他瀏覽器需要使用他的代碼)。至于Action類,和上傳單個文件的Action類基本一至,只需要將三個屬性的類型改為List即可。代碼如下:
          package action;

          import java.io.*;
          import com.opensymphony.xwork2.ActionSupport;

          public class UploadMoreAction extends ActionSupport
          {
              
          private java.util.List<File> uploads;
              
          private java.util.List<String> uploadsFileName;
              
          private java.util.List<String> uploadsContentType;

              
          public java.util.List<String> getUploadsFileName()
              {
                  
          return uploadFileName;
              }
              
          public void setUploadFileName(java.util.List<String> fileNames)
              {
                  
          this.uploadFileName = fileNames;
              }
              
          public java.util.List<File> getUploads()
              {
                  
          return uploads;
              }

              
          public void setUploads(java.util.List<File> uploads)
              {
                  
          this.uploads = uploads;
              }

              
          public void setUploadsContentType(java.util.List<String> contentTypes)
              {
                  
          this.uploadsContentType = contentTypes;

              }

              
          public java.util.List<String> getUploadsContentType()
              {
                  
          return this.uploadsContentType;
              }

              
          public String execute() throws Exception
              {
                  
          if (uploads != null)
                  {
                      
          int i = 0;
                      
          for (; i < uploads.size(); i++)
                      {
                          java.io.InputStream is 
          = new java.io.FileInputStream(uploads.get(i));
                          java.io.OutputStream os 
          = new java.io.FileOutputStream(
                                  
          "d:\\upload\\" + uploadsFileName.get(i));
                          
          byte buffer[] = new byte[8192];
                          
          int count = 0;
                          
          while ((count = is.read(buffer)) > 0)
                          {
                              os.write(buffer, 
          0, count);
                          }
                          os.close();
                          is.close();
                      }
                  }
                  
          return SUCCESS;
              }
          }

              在execute方法中,只是對List對象進行枚舉,在循環中的代碼和上傳單個文件時的代碼基本相同。如果讀者使用過struts1.x的上傳組件,是不是感覺Struts2的上傳功能更容易實現呢?Struts1.x中上傳多個文件時,可是需要建立帶索引的屬性的。而在Struts2中,就是這么簡單就搞定了。1是上傳任意多個文件的界面。



          1

              在本文中給出了用Struts2上傳任意多個文件的一個方法,如果哪位讀者有更好的方法,請跟貼!

          下一篇:Struts2教程8:攔截器概述






          Android開發完全講義(第2版)(本書版權已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2008-04-27 21:47 銀河使者 閱讀(24695) 評論(40)  編輯  收藏 所屬分類: Struts2 原創

          評論

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          http://www.tudousee.cn 土豆網電視劇前線 這個網站的上傳也是用這個的說.
          2008-04-28 10:57 | 王能

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          這個上傳我做了好多次,就算一模一樣也不能運行正常,請指教一下。
          QQ:287112724
          2008-05-19 16:04 | muboy

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          出現什么錯誤,請詳細說一下,
          2008-05-19 16:13 | 銀河使者

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          一直報一個http500錯誤
          異常如下
          java.lang.RuntimeException: Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]
          com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:136)
          com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:476)
          com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:486)
          com.opensymphony.xwork2.inject.ContainerImpl$9.call(ContainerImpl.java:517)
          com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:542)
          com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:515)
          org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:697)
          org.apache.struts2.dispatcher.FilterDispatcher.prepareDispatcherAndWrapRequest(FilterDispatcher.java:330)
          org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:390)
          2008-05-19 16:20 | muboy

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          文件名中有中文該怎么處理?
          2008-05-20 10:53 | 小哥

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          to muboy
          struts2的上傳需要一些jar文件,如common-fileupload.jar,不知你加到classpath里沒
          2008-05-20 11:44 | 銀河使者

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          如果文件中有中文名,只要服務端能成功獲得中文文件名,就可以直接保存,關鍵是在服務端能否獲得中文文件名
          2008-05-20 11:46 | 銀河使者

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          commons-fileupload-1.1.1.jar
          commons-io-1.1.jar

          我添加了這2個jar文件就可以了,謝謝!
          2008-05-20 13:21 | muboy

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          頁面用gb2312
          傳到服務器用8859這些方式我都試了,還是亂碼,你哪里有好辦法嗎?
          2008-05-20 13:22 | 小哥

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          to 小哥
          我再試一下,
          2008-05-20 15:27 | 銀河使者

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          上傳多個文件,為什么只能上傳第一個文件呀。。而且三個文件名都成了一個文件名了。
          2008-05-22 16:38 | sdlvzg

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          那是因為最后一個文件將前兩個文件覆蓋了,你需要為每一個文件起不同的名子。
          2008-05-22 17:24 | 銀河使者

          # re: Struts2教程7:上傳任意多個文件[未登錄]  回復  更多評論   

          上傳多個文件的 uploads 怎么獲得的值.
          2008-06-27 15:22 | east

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          文章的代碼里有啊,如果是多個文件,將每個文件作為一個java.io.File對象保存在List中,實際上,每一個File對象就是一個已經上傳到服務器的臨時文件了。

          public class UploadMoreAction extends ActionSupport
          {
          private java.util.List<File> uploads;
          ...
          }
          2008-06-27 17:31 | 銀河使者

          # re: Struts2教程7:上傳任意多個文件[未登錄]  回復  更多評論   

          頁面上 <input type='file' name='upload' />
          應該是 <input type='file' name='uploads' />


          2008-06-30 10:16 | east

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          是upload沒錯
          2008-06-30 10:27 | 銀河使者

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          謝謝啦,成功了。樓主寫得真好。。
          2008-11-01 16:40 | daoyongyu

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          怎么缺了這么jar呢?還是什么原因?反正放進去是好使了,呵呵
          commons-fileupload-1.2.1.jar
          commons-io-1.4.jar
          需要的可以給我email
          hanjiyuan@gmail.com
          2009-02-11 16:33 | 這是一個好教程

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          @這是一個好教程
          這兩個jar可以到www.apache.org上的commons子項目上下載。這兩個文件是必須的。
          2009-02-11 16:50 | 銀河使者

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          請問一下.在Action中uploadFileName和uploadContentType為什么是空的沒值.
          2009-03-11 13:09 | love_future

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          @love_future
          不知你的頁同是如何寫的 <s:file>標簽的name屬性值應為upload
          2009-03-11 13:55 | 銀河使者

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          請問一下,成員變量fileName是不是應該是uploadFileName,否則取不到文件名,fileName為null。
          2009-04-24 12:25 | lvzhu

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          @lvzhu
          2009-04-24 13:07 | 銀河使者

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          嗯,不錯啊
          2009-07-31 07:58 | jadmin

          # re: Struts2教程7:上傳任意多個文件[未登錄]  回復  更多評論   

          不能上傳大一點的文件,報錯如下
          ,這個怎么解決
          the request was rejected because its size (2457472) exceeds the configured maximum (2097152)
          2009-08-02 22:08 | 星星

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          默認最大是2M
          2009-08-02 22:18 | 銀河使者

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          需要進行設置
          2009-08-02 22:19 | 銀河使者

          # re: Struts2教程7:上傳任意多個文件[未登錄]  回復  更多評論   

          哦,呵呵,謝謝,加里一句struts.multipart.maxSize=1000000000 就可以了,
          2009-08-02 22:33 | 星星

          # re: Struts2教程7:上傳任意多個文件[未登錄]  回復  更多評論   

          public String uploadFile() throws Exception{
          for (int i = 0; i < file.size(); ++i)
          {
          InputStream is = new FileInputStream(file.get(i));

          String root = ServletActionContext.getServletContext().getRealPath("\\upload");

          File destFile = new File(root, this.getFileFileName().get(i));

          OutputStream os = new FileOutputStream(destFile);

          byte[] buffer = new byte[400];

          int length = 0;

          while ((length = is.read(buffer)) > 0)
          {
          os.write(buffer, 0, length);
          }

          is.close();

          os.close();
          }


          return Action.SUCCESS;
          }
          2009-09-21 11:26 | 獵人

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          暈。不用配置struts2的配置文件嗎
          2010-01-20 15:28 | 夜來瘋

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          The server encountered an internal error () that prevented it from fulfilling this request

          你們說的包我也加進去的 但就是不行 。。。。。。
          upload.jsp
          <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
          <form action="upload.action" method="post">
          <input name="upload" type="file">
          <input name="submit" type="submit" value="upload">
          </form>

          UploadAction
          package upload;

          import java.io.*;
          import com.opensymphony.xwork2.ActionSupport;

          public class UploadAction extends ActionSupport
          {
          private File upload;
          private String uploadFileName;
          private String uploadContentType;

          public String getUploadFileName()
          {
          return uploadFileName;
          }

          public void setUploadFileName(String fileName)
          {
          this.uploadFileName = fileName;
          }

          public File getUpload()
          {
          return upload;
          }

          public void setUpload(File upload)
          {
          this.upload = upload;
          }
          public void setUploadContentType(String contentType)
          {
          this.uploadContentType=contentType;

          }

          public String getUploadContentType()
          {
          return this.uploadContentType;
          }
          public String execute() throws Exception
          {
          java.io.InputStream is = new java.io.FileInputStream(upload);
          java.io.OutputStream os = new java.io.FileOutputStream("d:\\upload\\" + uploadFileName);
          byte buffer[] = new byte[8192];
          int count = 0;
          while((count = is.read(buffer)) > 0)
          {
          os.write(buffer, 0, count);
          }
          os.close();
          is.close();
          return "ok";
          }
          }

          struts.xml
          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
          "http://struts.apache.org/dtds/struts-2.0.dtd">
          <struts>
          <package name="struts2.0" extends="struts-default">
          <action name="login" class="com.LoginAction">
          <result name="input">/login.jsp</result>
          <result name="success">/result.jsp</result>
          <result name="filter">login.jsp</result>
          </action>
          <action name="upload" class="upload.UploadAction">
          <result name="ok">/ok.jsp</result>
          </action>
          </package>
          </struts>
          2010-07-15 11:56 | str

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          <input type='file' name='upload' /> 的話 action 中 if (uploads != null) 進不去啊
          2010-08-09 17:35 | waich

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          暈死~~調了N長時間。。。lz的UploadMoreAction 代碼其中一段應該如下:
          public java.util.List<String> getUploadsFileName()
          {
          return uploadsFileNames;
          }
          public void setUploadsFileName(java.util.List<String> fileNames)
          {
          this.uploadsFileNames = fileNames;
          }
          最要命的是把setUploadsFileName寫成setUploadFileName。。。額的神那最后才發現
          2011-02-22 22:21 | kirea

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          頁面上到底應該是 <input type='file' name='upload' /> 還是
          <input type='file' name='uploads' /> ?我用'upload'時上傳多個文件在UploadMoreAction的execute()中uploads=null,所以我改用'uploads',但是上傳時又報以下錯誤,怎么回事???

          HTTP Status 500 -

          --------------------------------------------------------------------------------

          type Exception report

          message

          description The server encountered an internal error () that prevented it from fulfilling this request.

          exception

          java.lang.NullPointerException
          action.UploadMoreAction.execute(UploadMoreAction.java:50)
          sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          java.lang.reflect.Method.invoke(Method.java:597)
          com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
          com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
          com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
          com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
          org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
          com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
          com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
          com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:314)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
          com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
          com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
          org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
          org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
          org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)


          note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.

          2011-05-06 14:53 | 阿侃

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          struts2 的配置文件怎么寫啊, 或 web.xml 中,需要寫什么呢?
          2011-05-18 23:16 | 愛好者

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          @愛好者
          <filter>
          <filter-name>struts2</filter-name>
          <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
          </filter>
          <filter-mapping>
          <filter-name>struts2</filter-name>
          <url-pattern>/*</url-pattern>
          </filter-mapping>
          2011-06-29 17:35 | 愛好者

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          老師有個地方你寫錯了:
          <input type='file' name='upload' />應該是
          <input type='file' name='uploads' />
          因為在action中的定義是
          private java.util.List<File> uploads;
          2011-08-14 22:58 | amenmen

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          上傳任意多個文件保存到數據庫中怎么做(oracle數據庫,blob類型)
          2013-12-16 14:16 | sxx

          # 單個文件上傳錯誤  回復  更多評論   

          我jsp頁面選擇文件后獲得的是真實文件路徑。但是提交到后臺就是
          java.io.InputStream is = new java.io.FileInputStream(upload);第一句話提示錯誤
          java.io.FileNotFoundException: D:\tomcat7.0\work\Catalina\localhost\wyxfweb\upload_5931d1d4_1510eceb59e__8000_00000000.tmp (???????????)
          2015-11-16 13:44 | 趙仁培

          # re: Struts2教程7:上傳任意多個文件  回復  更多評論   

          多個文件上傳成功 如何在成功頁面顯示已上傳的文件名字??
          2016-08-11 22:49 |
          主站蜘蛛池模板: 南投县| 东莞市| 惠来县| 嘉兴市| 沙河市| 盐边县| 濉溪县| 营口市| 和平县| 百色市| 和田市| 郯城县| 从化市| 宁明县| 南江县| 浪卡子县| 凉山| 永胜县| 若羌县| 宁明县| 东安县| 唐河县| 镇赉县| 军事| 墨竹工卡县| 宜州市| 托里县| 安陆市| 吉水县| 永靖县| 固始县| 藁城市| 谢通门县| 宝清县| 天水市| 达拉特旗| 钟祥市| 吴川市| 夹江县| 盐源县| 思南县|