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

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

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

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

    Struts1.x系列教程(8):上傳單個文件

    本文為原創(chuàng),如需轉(zhuǎn)載,請注明作者和出處,謝謝!

    上一篇:Struts1.x系列教程(7):Logic標(biāo)簽庫

    Struts2教程7:上傳任意多個文件

        Web程序中的上傳文件的功能一般會使用<input type=file.../>標(biāo)簽在客戶端顯示輸入要上傳的文件名的用戶接口。如果讀者使用過JSP/Servlet來處理客戶端上傳的文件就會知道,實現(xiàn)這個功能并不是很容易。而在Struts中為我們提供了一種機制,可以非常方便地將客戶端上傳的文件保存在服務(wù)端。
       
    Struts Html標(biāo)簽庫中提供了一個<html:file>標(biāo)簽,可以和FormFile類型的屬性一起使用。通過這個屬性返回的FormFile對象,就可以很方便地獲得上傳文件的InputStream對象,并做進一步地處理。

        Struts中,一個FormFile對象代表一個上傳的文件。FormFile實際上是一個接口,我們可以在org.apache.struts.upload包中找到這個接口。FormFile接口有如下五個常用的方法:

        1. getInputStream()方法

        這個方法用于獲得上傳文件的java.io.InputStream對象,我們可以從這個InputStream對象中讀取上傳文件的數(shù)據(jù),并將其寫到服務(wù)端指定的路徑下。

        2. getFileData()方法

        這個方法用于將上傳文件的整個內(nèi)容放到一個byte類型的數(shù)組中,如果上傳文件的尺寸比較小的話,使用這個方法可以很方便地將上傳文件保存到在服務(wù)端的指定路徑中。
        3. getFileName()方法

        這個方法用于獲得上傳文件的文件名(不包括文件在客戶機的路徑部分)。

        4. getFileSize()方法

        這個方法用于獲得上傳文件的字節(jié)數(shù)。

        5. destroy()方法

        用于銷毀所有和當(dāng)前上傳文件相關(guān)的資源。

       下面的例子演示了如何使用<html:file>標(biāo)簽和FormFile對象來上傳單個文件。實現(xiàn)這個例子需要如下六步:

    【第1步】建立上傳文件的JSP頁面
        在<samples工程目錄>目錄中建立一個uploadFile.jsp文件,代碼如下:

      <%@ page pageEncoding="GBK"%>
      
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
      
    <html>
        
    <head>
          
    <title>上傳單個文件(文件大小不能超過2M) </title>
        
    </head>
        
    <body>
    <%-- 在<html:form>標(biāo)簽中必須加enctype="multipart/form-data"  --%>
          
    <html:form enctype="multipart/form-data" action="uploadFile"> 
            
    <html:file property="myFile"/><p>  <%-- 使用<html:file>標(biāo)簽讓用戶輸入上傳文件名  --%>
            
    <html:submit value="上傳"/>
          
    </html:form>
        
    </body>
      
    </html>

    【第2步】建立ActionForm的子類

        在<samples工程目錄>"src"actionform目錄中建立一個UploadForm.java文件,代碼如下:

      package actionform;
      
      
    import org.apache.struts.action.*;
      
    import org.apache.struts.upload.FormFile;
      
      
    public class UploadForm extends ActionForm
      {  
          
    private FormFile myFile;  // 這個myFile代表要上傳的文件
      
          
    public FormFile getMyFile()
          {
              
    return myFile;
          }
          
    public void setMyFile(FormFile myFile)
          {
              
    this.myFile = myFile;
          }
      }

    【第3步】建立Struts動作類(Action的子類)

        在Struts中,一般在Struts的動作類中處理上傳的文件。在<samples工程目錄>"src"action目錄中建立一個UploadAction.java文件,代碼如下:

      package action;
      
      
    import javax.servlet.http.*;
      
    import org.apache.struts.action.*;
      
    import org.apache.struts.upload.FormFile;
      
    import java.io.*
      
    import actionform.*;
      
      
    public class UploadAction extends Action
      {
          
    protected void saveFile(FormFile formFile) throws Exception
          {
              
    // 從web.xml文件中獲得指定的上傳路徑
              String path = this.getServlet().getServletConfig().getInitParameter("uploadPath");
              InputStream in 
    = formFile.getInputStream();   // 獲得上傳文件的InputStream
              // 在服務(wù)端指定的上傳路徑中建立一個空的文件(文件名為getFileName()方法返回的值)
              FileOutputStream fout = new FileOutputStream(path + formFile.getFileName());   
              
    byte buffer[] = new byte[8192];  
              
    int count = 0;
              //  開始向上傳路徑中剛建立的文件寫入數(shù)據(jù),每次寫8k字節(jié)
              while ((count = in.read(buffer)) > 0
              {
                  fout.write(buffer, 
    0, count);
              }
              fout.close();
              formFile.destroy();   
    // 上傳成功后,銷毀當(dāng)前上傳文件的資源
          }
          
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                  HttpServletRequest request, HttpServletResponse response)
          {
              UploadForm uForm 
    = (UploadForm) form;
              PrintWriter out 
    = null;
              
    try
              {
                  response.setCharacterEncoding(
    "GBK");
                  out 
    = response.getWriter();
                  saveFile(uForm.getMyFile());  
    // 將上傳文件保存到指寫的路徑(在web.xml中配置)
                  out.println("上傳文件成功.");
              }
              
    catch (Exception e)
              {
                  out.println(e.getMessage());
              }
              
    return null;
          }
      }

        在saveFile方法中,首先從web.xml的Servlet初始化參數(shù)中獲得一個用于保存上傳文件的路徑。然后從FormFile對象中獲得上傳文件的InputStream對象,并對這個InputStream對象中的字節(jié)進行循環(huán)讀取,并寫到新的文件中。最后,在上傳成功后,將FormFile對象銷毀。
    【第4步】配置struts-config.xml
        在這一步來配置一下在第2步和第3步分別建立的ActionForm和Action的子類。打開struts-config.xml文件,在<form-beans>中加入如下的子標(biāo)簽:

    <form-bean name="uploadForm" type="actionform.UploadForm" />   

       在<action-mappings>中加入如下的子標(biāo)簽:

      <action name="uploadForm" path="/uploadFile" scope="request" type="action.UploadAction" />

    【第5步】設(shè)置用于保存上傳文件的路徑
        打開web.xml文件,找到一個叫action的Servlet(也就是用于處理Struts動作的Servlet),并在<servlet>中加入如下的子標(biāo)簽(假設(shè)保存上傳文件的路徑為D:"upload",路徑的最后一個字符必須是“"”):

    <init-param>
        
    <param-name>uploadPath</param-name>
        
    <param-value>D:\upload\</param-value>
    </init-param>

    【第6步】限制上傳文件的大小


        這一步是可選的,如果不限制上傳文件的大小,就意味著可以上傳任意大小的文件。而一般的應(yīng)用程序,如電子相冊,網(wǎng)絡(luò)硬盤都會限制上傳文件的最大尺寸。
        打開struts-config.xml文件,在<struts-config>中加入如下的子標(biāo)簽:

      <controller maxFileSize="2M" />

        上面的<controller>標(biāo)簽將上傳文件的最大尺寸設(shè)為2M,maxFileSize屬性值的單位可以是M,也可以是K或G,如2K,5G等。

        啟動Tomcat后,在IE中輸入如下的URL來測試程序:

    http://localhost:8080/samples/uploadFile.jsp


    下一篇:Struts1.x系列教程(9):上傳任意多個文件



    Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺灣)

    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 2009-02-03 09:43 銀河使者 閱讀(4169) 評論(0)  編輯  收藏 所屬分類: javaweb 原創(chuàng)struts1.x

    主站蜘蛛池模板: 亚洲黄色网址大全| 久久久久免费精品国产| 亚洲成人黄色在线观看| 亚洲欧洲日产国码高潮αv| 女人与禽交视频免费看| 114级毛片免费观看| 七色永久性tv网站免费看| yellow视频免费看| 男男gay做爽爽免费视频| 亚洲色大成网站www永久网站| 久久久亚洲AV波多野结衣| 亚洲AV无码专区亚洲AV伊甸园 | 亚洲欧洲精品成人久久曰| 亚洲最大在线观看| 亚洲国产一区二区a毛片| 亚洲中文字幕无码永久在线 | 亚洲色偷偷综合亚洲AV伊人蜜桃| 亚洲精品人成电影网| 亚洲av日韩综合一区在线观看| 亚洲日韩精品无码一区二区三区 | 亚洲国产精品网站在线播放| 亚洲人成综合网站7777香蕉| 亚洲一卡二卡三卡| 亚洲国产日韩在线成人蜜芽| 亚洲视频免费在线播放| 久久精品国产亚洲av高清漫画 | 国产精品成人啪精品视频免费| 美女被免费网站在线视频免费 | 永久免费AV无码国产网站| 99久久精品日本一区二区免费| 亚洲网站在线免费观看| 免费看片在线观看| 青青青免费国产在线视频小草| 131美女爱做免费毛片| 国内精品乱码卡1卡2卡3免费| 黄页网站在线观看免费高清| 一二三四影视在线看片免费 | 婷婷久久久亚洲欧洲日产国码AV| 亚洲AV无码久久精品蜜桃| 亚洲va中文字幕无码久久| 西西人体44rt高清亚洲|