隨筆-348  評論-598  文章-0  trackbacks-0

          先在struts-config.xml里面聲明一個DynaActionForm,在做一個關聯的Action

                <form-bean name="uploadForm" type="org.apache.struts.action.DynaActionForm" dynamic="true">
                  
          <form-property name="filename" type="java.lang.String"/> 
                  
          <form-property name="uploadfile" type="org.apache.struts.upload.FormFile"/> 
                
          </form-bean>
               
          <action
                   
          attribute="uploadForm"
                   input
          ="/form/upload.jsp"
                   name
          ="uploadForm"
                   path
          ="/upload"
                   scope
          ="request"
                   type
          ="com.gcoresoft.struts.action.UploadAction"
                   
          />
          Action代碼如下
          /*
           * Generated by MyEclipse Struts
           * Template path: templates/java/JavaClass.vtl
           
          */

          package com.gcoresoft.struts.action;

          import java.io.FileNotFoundException;
          import java.io.FileOutputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.OutputStream;
          import java.io.UnsupportedEncodingException;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;
          import org.apache.struts.action.Action;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;
          import org.apache.struts.action.DynaActionForm;
          import org.apache.struts.upload.FormFile;


          /** 
           * MyEclipse Struts
           * Creation date: 05-12-2007
           * 
           * XDoclet definition:
           * @struts.action path="/upload" name="Form" attribute="uploadForm" input="/form/upload.jsp" scope="request" validate="true"
           
          */

          public class UploadAction extends Action {
              
          private static final Log log = LogFactory.getLog(UploadAction.class);
              
          /*
               * Generated Methods
               
          */


              
          /** 
               * Method execute
               * 
          @param mapping
               * 
          @param form
               * 
          @param request
               * 
          @param response
               * 
          @return ActionForward
               
          */

              
          public ActionForward execute(ActionMapping mapping, ActionForm form,
                      HttpServletRequest request, HttpServletResponse response) 
          {
                  DynaActionForm uploadForm 
          = (DynaActionForm) form;// TODO Auto-generated method stub
                  String filename=((String)uploadForm.get("filename")).trim();
                  FormFile file
          =(FormFile)uploadForm.get("uploadfile");
                  
          if(filename.equals("")||filename==null
                  
          {
                      filename
          =file.getFileName();
                      
          try {
                          filename
          =new String(filename.getBytes("GBK"),"UTF-8");//編碼轉換
                      }
           catch (UnsupportedEncodingException e) {
                          
          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }

                  }


                  log.debug(
          "Filename:"+filename);
                  String filepath
          ="e:\\temp\\";
                  log.debug(
          "Realpath:"+filepath);
                  
          try {
                      InputStream in
          =file.getInputStream();
                      OutputStream out
          =new FileOutputStream(filepath+filename);
                      
          byte[] buffer=new byte[20000];
                      
          int n=0;
                      
          while((n=in.read(buffer))!=-1)
                      
          {
                          out.write(buffer, 
          0, n);
                      }
              
                      out.close();
                      in.close();
                      log.debug(
          "Upload Successfully");
                      
          return mapping.findForward("success");
                  }
           catch (FileNotFoundException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
           catch (IOException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }

                  
          return mapping.findForward("failure");
                  
              }

          }
          相關的jsp文件
          <%@ page language="java" pageEncoding="UTF-8"%>
          <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> 
          <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
           
          <html> 
              
          <head>
                  
          <title>JSP for DynaActionForm form</title>
              
          </head>
              
          <body>
                  
          <html:form action="/upload" enctype = "multipart/form-data">
                      filename : 
          <html:text property="filename"/><html:errors property="filename"/><br/>
                      uploadfile : 
          <html:file property="uploadfile"/><html:errors property="uploadfile"/><br/>
                      
          <html:submit/><html:cancel/>
                  
          </html:form>
              
          </body>
          </html>

          這樣基本就可以了。
          還有就是在web.xml文件里面聲明了一個Set Character Encoding沒效果,不知道怎么回事,呆會晚上問下人看看是什么問題。

          這幾天查了很多資料都無法解決那個問題,很多都提示需要修改源代碼,沒辦法,先拿這個湊合下吧。
          在網上還找到一個方法就是將struts升級到1.2,formfile在1.2中解決了中文亂碼這個問題,所以我直接升級到了1.2問題解決。
          老bean那里也有一個方法,就是使用Jakarta 文件上傳類,詳細資料請參考:
          http://www.aygfsteel.com/beansoft/archive/2007/01/05/92087.html


          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2007-05-12 17:20 TiGERTiAN 閱讀(1471) 評論(2)  編輯  收藏 所屬分類: Java

          評論:
          # re: Struts中上傳文件的總結 2007-05-18 18:25 | windows
          問樓主個問題:JSP頁面中有:
          <html:select property="testForm" size="2">
          <html:option value="1">test1</html:option>
          <html:option value="2">test2</html:option>
          </html:select>
          在動態DynaActionForm中可否設置相關參數啊?
          如不能的話如何解決呢?用靜態FORM嗎?那在靜態FORM里如何解決org.apache.struts.upload.FormFile呢?
          多謝!
            回復  更多評論
            
          # re: Struts中上傳文件的總結 2007-05-18 22:44 | TiGERTiAN
          第一個問題,不可以使用DynaActionForm,得用靜態的form-bean。

          第二個問題,靜態的form-bean中,在相應的form類中添加一個FormFile變量就可以了,和其他表單項目的獲取一樣。
          private FormFile file;
          public void setFile(FormFile file)
          {
          this.file=file;
          }

          public FormFile getFile()
          {
          return (this.file);
          }
          在Action中獲取這個file就可以了,其它操作同上。  回復  更多評論
            
          主站蜘蛛池模板: 读书| 界首市| 县级市| 杂多县| 博爱县| 沙雅县| 循化| 婺源县| 蒙城县| 民县| 泗洪县| 西盟| 雷山县| 台前县| 温泉县| 府谷县| 宣恩县| 蛟河市| 自治县| 海城市| 南江县| 建宁县| 沙坪坝区| 宿迁市| 商城县| 辛集市| 忻城县| 连南| 彰化县| 宿迁市| 济源市| 大悟县| 蒙阴县| 项城市| 阳西县| 邓州市| 方正县| 崇礼县| 沙田区| 千阳县| 泸定县|