<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 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 銀河使者 閱讀(24683) 評論(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 |
    主站蜘蛛池模板: 亚洲国产成人一区二区精品区| 一级一片免费视频播放| 久久亚洲国产精品123区| 在线a级毛片免费视频| 高清一区二区三区免费视频| 国内成人精品亚洲日本语音 | 亚洲va在线va天堂va手机| 亚洲日韩在线观看| 日本特黄特色aa大片免费| 久久午夜免费视频| 日韩精品无码专区免费播放| 亚洲免费在线观看| 国产尤物在线视精品在亚洲| 亚洲精品无码久久久久秋霞| 亚洲图片中文字幕| 亚洲综合色一区二区三区小说| 亚洲人成77777在线播放网站| 亚洲国产婷婷综合在线精品| 日韩高清在线高清免费| 天天看免费高清影视| 成人免费午夜无码视频| 妻子5免费完整高清电视| 亚洲免费视频观看| 亚洲电影免费观看| 亚洲国产精品免费在线观看| 91制片厂制作传媒免费版樱花| 精品在线免费观看| 成人无码WWW免费视频| 免费看少妇高潮成人片| baoyu122.永久免费视频| 两个人看www免费视频| 西西人体免费视频| 无码人妻久久一区二区三区免费| 国产午夜不卡AV免费| 日韩免费电影网站| 3344永久在线观看视频免费首页 | 久久亚洲中文字幕精品一区| 国产精品亚洲综合一区| 亚洲日韩精品一区二区三区| 亚洲国产精品无码专区影院| 亚洲第一精品福利|