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

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

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

    我的漫漫程序之旅

    專注于JavaWeb開發
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數據加載中……

    Struts2中實現文件上傳(附源碼)

    Struts2使用開源項目Apache Jakarta Commons FileUpload和內建的FileUploadInterceptor攔截器實現文件上傳.


    實現原理 :

    Struts 2是通過Commons FileUpload文件上傳。Commons FileUpload通過將HTTP的數據保存到臨時文件夾,然后Struts使用fileUpload攔截器將文件綁定到Action的實例中。從而我們就能夠以本地文件方式的操作瀏覽器上傳的文件。

    具體實現

    前段時間Apache發布了Struts 2.1GA,所以本文的實現是以該版本的Struts作為框架的。以下是例子所依賴類包的列表:
    依賴類包的列表
    其中commons-io-1.1.jar和commons-fileupload-1.1.3.jar可以在
    http://jakarta.apache.org/
    上下載.

    ★ 文件上傳頁面 index.jsp:

    <%@ page language="java" pageEncoding="GB18030"%>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <html>
      
    <head>
        
    <title>Upload Page</title>
      
    </head>
      
    <body>
      
    <s:form action="upload" method="post" enctype="multipart/form-data">
          
    <s:file name="doc" label="File"/>
          
    <s:submit value="upload"/>
      
    </s:form>
      
    </body>
    </html>


    先將表單的提交方式設為POST,然后將enctype設為multipart/form-data,這并沒有什么特別之處.
    ★ 處理文件上傳 FileUploadAction.java:

    package com;

    import java.io.File;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Random;

    import org.apache.commons.io.FileUtils;
    import org.apache.struts2.ServletActionContext;

    import com.opensymphony.xwork2.ActionSupport;

    public class FileUploadAction extends ActionSupport
    {
        
    private static final long serialVersionUID = 4658947796066228597L;
        
    private File doc;
        
    private String fileName;
        
    private String contentType;

        
    public void setDoc(File file)
        
    {
            
    this.doc = file;
        }


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


        
    public void setDocContentType(String contentType)
        
    {
            
    this.contentType = contentType;
        }


        @Override
        
    public String execute() throws Exception
        
    {
            System.out.println(
    "fileName:" + fileName);
            System.out.println(
    "contextType" + contentType);
            
    // 得到當前web工程下的/files目錄的在本機的絕對路徑,如果沒有這個文件夾則會創建
            String targetDirectory = ServletActionContext.getServletContext()
                    .getRealPath(
    "/files");
            
    //重命名上傳文件
            String targetFileName = generateFileName(fileName);
            
    //在指定目錄創建文件
            File target = new File(targetDirectory, targetFileName);
            
    //把要上傳的文件copy過去
            FileUtils.copyFile(doc, target);
            
    return SUCCESS;
        }

        
    //重命名上傳文件(非必須)
        public String generateFileName(String fileName)
        
    {
            String formatDate 
    = new SimpleDateFormat("yyMMddHHmmss")
                    .format(
    new Date());
            
    int random = new Random().nextInt(10000);
            
    int position = fileName.lastIndexOf(".");
            String extension 
    = fileName.substring(position);

            
    return formatDate + random + extension;
        }


        
    public String getFileName()
        
    {
            
    return fileName;
        }


    }


    在fileupload.jsp中,只有doc一個字段,而FileUploadAction.java中,卻有三個字段,Struts2怎么通過頁面的一個字段設置Action里的三個字段呢?沒錯,這就是FileUploadInterceptor的功勞了!你所要做的只是按照一定的樣式命名這三個字段的set方法,而字段名可以任意命名。第一個File類型的字段的set方法還是以常規的方式命名,另兩個String類型的字段的set方法必須分別以“File字段的set方法名+FileName”和“File字段的set方法名+ContentType”來命名。

    ★ 配置文件 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="com" extends="struts-default">
            
    <action name="upload" class="com.FileUploadAction">
                
    <result name="success">/success.jsp</result>
            
    </action>
        
    </package>
    </struts>    
    ★ 配置文件 web.xml:
    <?xml version="1.0" encoding="UTF-8"?>   
    <web-app version="2.4"     
        xmlns
    ="http://java.sun.com/xml/ns/j2ee"     
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"     
        xsi:schemaLocation
    ="http://java.sun.com/xml/ns/j2ee     
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    >   
            
        
    <filter>   
            
    <filter-name>struts-cleanup</filter-name>   
            
    <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>   
        
    </filter>   
            
        
    <filter>   
            
    <filter-name>struts2</filter-name>   
            
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>   
        
    </filter>   
            
        
    <filter-mapping>   
            
    <filter-name>struts-cleanup</filter-name>   
            
    <url-pattern>/*</url-pattern>   
        
    </filter-mapping>   
            
        
    <filter-mapping>   
            
    <filter-name>struts2</filter-name>   
            
    <url-pattern>/*</url-pattern>   
        
    </filter-mapping>   
       
    </web-app>   

    OK!源碼可以我的微軟網盤下載.

    posted on 2007-11-27 19:49 々上善若水々 閱讀(3778) 評論(2)  編輯  收藏 所屬分類: Struts2

    評論

    # re: Struts2中實現文件上傳(附源碼)  回復  更多評論   

    不錯,謝謝了,這個例子能用.注釋比較詳細~
    2007-11-28 10:37 | javascript

    # re: Struts2中實現文件上傳(附源碼)[未登錄]  回復  更多評論   

    贊一個
    2015-01-05 15:55 | jack
    主站蜘蛛池模板: 国产成人精品亚洲日本在线| 久久精品亚洲中文字幕无码网站| 亚洲欧好州第一的日产suv| 国产成人精品免费午夜app| 亚洲日本在线看片| 久久久久免费看黄a级试看| 亚洲成AV人在线观看天堂无码| 中国性猛交xxxxx免费看| 国产成人精品久久亚洲| 在线观看免费无码视频| 久久亚洲国产伦理| 波多野结衣在线免费观看| 日韩亚洲国产综合高清| 精品国产精品久久一区免费式| 久久精品国产亚洲AV电影网| 日韩一级免费视频| 免费亚洲视频在线观看| 四虎在线视频免费观看| 一级毛片免费在线播放| 免费一级特黄特色大片在线| 国产精品亚洲一区二区三区久久 | 亚洲综合一区二区三区四区五区| 99精品免费观看| 噜噜噜亚洲色成人网站∨| 精品一区二区三区免费| 亚洲熟妇无码八AV在线播放| aaa毛片免费观看| 亚洲国产另类久久久精品小说| 9久热精品免费观看视频| 亚洲色成人网站WWW永久| 野花香在线视频免费观看大全 | 亚洲精品国产情侣av在线| 最近高清中文字幕免费| 亚洲国产韩国一区二区| 美女视频黄是免费的网址| 亚洲中文无码mv| 国产资源免费观看| 国产精品九九久久免费视频| 亚洲男人的天堂www| 嫩草在线视频www免费观看| 亚洲精品视频专区|