<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
    主站蜘蛛池模板: 亚洲综合色自拍一区| 亚洲不卡av不卡一区二区| 乱爱性全过程免费视频| 亚洲成a人片77777老司机| 黄页网站免费在线观看| 曰批全过程免费视频免费看| 国产亚洲人成网站观看| 最近中文字幕免费mv视频8| 一本久久A久久免费精品不卡| 自怕偷自怕亚洲精品| 免费一级一片一毛片| 99精品视频免费观看| 国产精品亚洲专区无码牛牛| 久久国产精品亚洲一区二区| 情侣视频精品免费的国产| 91精品全国免费观看含羞草| 人妻无码中文字幕免费视频蜜桃| 亚洲国产中文在线视频| 亚洲综合色自拍一区| 国产精品无码免费视频二三区| 日韩精品免费视频| 一级中文字幕免费乱码专区| 国产精品亚洲综合五月天| 亚洲国产成人一区二区精品区| 热久久精品免费视频| 国产精品1024永久免费视频| 国产在线精品一区免费香蕉 | 亚洲欧美日本韩国| 亚洲爆乳无码专区| 久久精品国产亚洲5555| AV片在线观看免费| 97av免费视频| 国产精品免费福利久久| jizz免费在线观看| 国产精品亚洲五月天高清| 亚洲一区二区三区久久| 亚洲视频在线免费观看| 亚洲日韩中文无码久久| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲短视频在线观看| 亚洲国产精品无码久久SM|