隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
          數據加載中……

          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 銀河使者 閱讀(24681) 評論(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 |
          主站蜘蛛池模板: 池州市| 崇州市| 盐边县| 苍溪县| 招远市| 中卫市| 旌德县| 阳东县| 本溪市| 淮北市| 遂平县| 阳信县| 宝坻区| 沙河市| 潞城市| 芦山县| 县级市| 高雄市| 开远市| 泸定县| 巴东县| 商城县| 晋中市| 麻栗坡县| 宜春市| 河西区| 永胜县| 浦城县| 任丘市| 兴宁市| 洛浦县| 平武县| 津南区| 达孜县| 广宗县| 三门县| 巢湖市| 宝丰县| 兴山县| 许昌县| 禹城市|