熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

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

2022-06-13   來源: Java開源技術 

  在Web程序中的上傳文件的功能一般會使用<input type=file……/>標簽在客戶端顯示輸入要上傳的文件名的用戶接口如果讀者使用過JSP/Servlet來處理客戶端上傳的文件就會知道實現這個功能並不是很容易而在Struts中為我們提供了一種機制可以非常方便地將客戶端上傳的文件保存在服務端

  在Struts Html標簽庫中提供了一個<htmlfile>標簽可以和FormFile類型的屬性一起使用通過這個屬性返回的FormFile對象就可以很方便地獲得上傳文件的InputStream對象並做進一步地處理

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

   getInputStream()方法

  這個方法用於獲得上傳文件的javaioInputStream對象我們可以從這個InputStream對象中讀取上傳文件的數據並將其寫到服務端指定的路徑下

   getFileData()方法

  這個方法用於將上傳文件的整個內容放到一個byte類型的數組中如果上傳文件的尺寸比較小的話使用這個方法可以很方便地將上傳文件保存到在服務端的指定路徑中

   getFileName()方法

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

   getFileSize()方法

  這個方法用於獲得上傳文件的字節數

   destroy()方法

  用於銷毀所有和當前上傳文件相關的資源

  下面的例子演示了如何使用<htmlfile>標簽和FormFile對象來上傳單個文件實現這個例子需要如下六步

  【第步】建立上傳文件的JSP頁面

  在<samples工程目錄>目錄中建立一個uploadFilejsp文件代碼如下

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

  【第步】建立ActionForm的子類

    在<samples工程目錄>srcactionform目錄中建立一個UploadFormjava文件代碼如下

     package actionform;
  
  import orgapachestrutsaction*;
  import orgapachestrutsuploadFormFile;
  
  public class UploadForm extends ActionForm
  {  
      private FormFile myFile;  // 這個myFile代表要上傳的文件
  
      public FormFile getMyFile()
      {
          return myFile;
      }
      public void setMyFile(FormFile myFile)
      {
          thismyFile = myFile;
      }
  }

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

    在Struts中一般在Struts的動作類中處理上傳的文件在<samples工程目錄>srcaction目錄中建立一個UploadActionjava文件代碼如下

     package action;
  
  import javaxservlethttp*;
  import orgapachestrutsaction*;
  import orgapachestrutsuploadFormFile;
  import javaio*; 
  import actionform*;
  
  public class UploadAction extends Action
  {
      protected void saveFile(FormFile formFile) throws Exception
      {
          // 從webxml文件中獲得指定的上傳路徑
          String path = thisgetServlet()getServletConfig()getInitParameter(uploadPath);
          InputStream in = formFilegetInputStream();   // 獲得上傳文件的InputStream
          // 在服務端指定的上傳路徑中建立一個空的文件(文件名為getFileName()方法返回的值)
          FileOutputStream fout = new FileOutputStream(path + formFilegetFileName());   
          byte buffer[] = new byte[];  
          int count = ;
          //  開始向上傳路徑中剛建立的文件寫入數據每次寫k字節
          while ((count = inread(buffer)) > 
          {
              foutwrite(buffer  count);
          }
          foutclose();
          formFiledestroy();   // 上傳成功後銷毀當前上傳文件的資源
      }
      public ActionForward execute(ActionMapping mapping ActionForm form
              HttpServletRequest request HttpServletResponse response)
      {
          UploadForm uForm = (UploadForm) form;
          PrintWriter out = null;
          try
          {
              responsesetCharacterEncoding(GBK);
              out = responsegetWriter();
              saveFile(uFormgetMyFile());  // 將上傳文件保存到指寫的路徑(在webxml中配置)
              outprintln(上傳文件成功);
          }
          catch (Exception e)
          {
              outprintln(egetMessage());
          }
          return null;
      }
  }

  在saveFile方法中首先從webxml的Servlet初始化參數中獲得一個用於保存上傳文件的路徑然後從FormFile對象中獲得上傳文件的InputStream對象並對這個InputStream對象中的字節進行循環讀取並寫到新的文件中最後在上傳成功後將FormFile對象銷毀

  【第步】配置strutsconfigxml

  在這一步來配置一下在第步和第步分別建立的ActionForm和Action的子類打開strutsconfigxml文件在<formbeans>中加入如下的子標簽

   <formbean name=uploadForm type=actionformUploadForm />

  在<actionmappings>中加入如下的子標簽

   <action name=uploadForm path=/uploadFile scope=request type=actionUploadAction />

  【第步】設置用於保存上傳文件的路徑

  打開webxml文件找到一個叫action的Servlet(也就是用於處理Struts動作的Servlet)並在<servlet>中加入如下的子標簽(假設保存上傳文件的路徑為D:upload路徑的最後一個字符必須是

   <initparam>
    <paramname>uploadPath</paramname>
    <paramvalue>D:\upload\</paramvalue>
</initparam>

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

    這一步是可選的如果不限制上傳文件的大小就意味著可以上傳任意大小的文件而一般的應用程序如電子相冊網絡硬盤都會限制上傳文件的最大尺寸

  打開strutsconfigxml文件在<strutsconfig>中加入如下的子標簽

   <controller maxFileSize=M />

  上面的<controller>標簽將上傳文件的最大尺寸設為MmaxFileSize屬性值的單位可以是M也可以是K或GKG等

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

   


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28912.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.