Struts2之文件上傳

        在變成過程中難免會遇到文件上傳和下載功能,比方說我們所做的系統中有些需要上傳附件文檔。對於這些,Struts2已經幫我們封裝好了,只需要按照一定規則來就可以。下面先來看看文件上傳功能:
一、單個文件上傳:
        1、前臺:
                1)上傳文件頁面(在這特別注意,上傳文件的form的enctype必須是multipart/form-data):upload.jsp
                <form action="fileUpload.action" method="post" enctype="multipart/form-data">
            username:<input type="text" name="username"><br>
            file:<input type="file" name="file"><br>
            <input type="submit" value="submit">
       </form>
    2)上傳後跳轉頁面:uploadResult.jsp
        <body>
            username:<s:property value="username" /><br>
            name:<s:property value="fileFileName" /><br>
            type:<s:property value="fileContentType" /><br>
        </body>  
    2、對應的struts.xml文件中的Action(和平時配置的action是一個樣子的)
        <struts>
         <!-- 設置文件上傳臨時目錄和上傳文件的大小限制 -->
        <constant name="struts.multipart.saveDir" value="/tmp"/> 
        <constant name="struts.multipart.maxSize" value="1048576000"/>

        <package name="struts2" extends="struts-default">
            <action name="fileUpload" class="com.tgb.struts2.UploadAction">
                <result name="success">/fileUploadResult.jsp</result>
           </action>     
        </package>
   </struts>
    3、Action類:UploadAction類
    public class UploadAction extends ActionSupport {
        private String username;
        //Struts封裝好的,直接用下面的屬性即可.
        private File file;
        private String fileFileName;
        private String fileContentType;
        //get、set方法省略...

        @Override
        public String execute() throws Exception {
            //獲取上傳文件的路徑
            String root=ServletActionContext.getRequest().getRealPath("/upload");

            //讀取文件內容
            InputStream is=new FileInputStream(file);
            //將內容寫到臨時文件destFile中
            File destFile=new File(root, fileFileName);
            //將文件寫到磁盤上
            OutputStream os=new FileOutputStream(destFile);
            byte[] buffer=new byte[400];
            int length=0;
            while (-1 !=(length=is.read(buffer))) {
                os.write(buffer,0,length);
            }
            is.close();
            os.close();
            //跳轉到成功頁面
            return SUCCESS;
        }
    }

    上面講述的是單個文件的上傳,除此之外,如果遇到批量上傳的話,不必擔心,來一個循環就幫我們很好的解決了該問題,下面來看多個文件上傳的例子

二、多個文件上傳
    1、前臺:
        1)fileUpload.jsp
        <form action="fileUpload2.action" method="post" enctype="multipart/form-data">
        username:<input type="text" name="username"><br>
        file:<input type="file" name="file"><br>
        file2:<input type="file" name="file"><br>
        file3:<input type="file" name="file"><br>
        <input type="submit" value="submit">
    </form>
        2)fileUploadResult.jsp
<body>
    username:<s:property value="username"/> <br>
    <s:iterator value="fileFileName" id="f">
        <s:property value="#f"/><br>
    </s:iterator>
</body>  
    2、對應的struts.xml文件中的Action      
        <struts>
       <!-- 設置文件上傳臨時目錄和上傳文件的大小限制 -->
       <constant name="struts.multipart.saveDir" value="/tmp"/> 
       <constant name="struts.multipart.maxSize" value="1048576000"/>

       <package name="struts2" extends="struts-default">
           <action name="fileUpload2" class="com.tgb.struts2.UploadAction2">
               <result name="success">/fileUploadResult2.jsp</result>
           </action>
       </package>
   </struts>
    3、UploadAction類
    public class UploadAction2 extends ActionSupport {
        private String username;
        private List<File> file;
        private List<String> fileFileName;
        private List<String> fileContentType;
        //get、set方法省略...
    
        @Override
        public String execute() throws Exception {
            for (int i = 0; i < file.size(); i++) {
                String root=ServletActionContext.getRequest().getRealPath("/upload");
                InputStream is=new FileInputStream(file.get(i));
                File destFile=new File(root, fileFileName.get(i));
                OutputStream os=new FileOutputStream(destFile);
                byte[] buffer=new byte[400];
                int length=0;
                while (-1 !=(length=is.read(buffer))) {
                    os.write(buffer,0,length);
                }
                is.close();
                os.close();
            }
            return SUCCESS;
        }
    }


發佈了159 篇原創文章 · 獲贊 243 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章