You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by hu...@apache.org on 2004/01/08 17:17:57 UTC

cvs commit: jakarta-struts/src/examples/org/apache/struts/webapp/upload UploadResources_ja.properties UploadResources.properties UploadForm.java UploadAction.java

husted      2004/01/08 08:17:57

  Added:       src/examples/org/apache/struts/webapp/upload
                        UploadResources_ja.properties
                        UploadResources.properties UploadForm.java
                        UploadAction.java
  Log:
  Place source code for upload module under examples.
  
  Revision  Changes    Path
  1.1                  jakarta-struts/src/examples/org/apache/struts/webapp/upload/UploadResources_ja.properties
  
  Index: UploadResources_ja.properties
  ===================================================================
  maxLengthExceeded=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u308b\u6700\u5927\u5024\u3092\u8d85\u3048\u307e\u3057\u305f
  
  
  
  1.1                  jakarta-struts/src/examples/org/apache/struts/webapp/upload/UploadResources.properties
  
  Index: UploadResources.properties
  ===================================================================
  maxLengthExceeded=The maximum upload length has been exceeded by the client.
  
  
  1.1                  jakarta-struts/src/examples/org/apache/struts/webapp/upload/UploadForm.java
  
  Index: UploadForm.java
  ===================================================================
  /*
  * $Header: /home/cvs/jakarta-struts/src/examples/org/apache/struts/webapp/upload/UploadForm.java,v 1.1 2004/01/08 16:17:57 husted Exp $
  * $Revision: 1.1 $
  * $Date: 2004/01/08 16:17:57 $
  *
  * ====================================================================
  *
  * The Apache Software License, Version 1.1
  *
  * Copyright (c) 1999-2003 The Apache Software Foundation.  All rights
  * reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
  *
  * 3. The end-user documentation included with the redistribution, if
  *    any, must include the following acknowlegement:
  *       "This product includes software developed by the
  *        Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowlegement may appear in the software itself,
  *    if and wherever such third-party acknowlegements normally appear.
  *
  * 4. The names "The Jakarta Project", "Struts", and "Apache Software
  *    Foundation" must not be used to endorse or promote products derived
  *    from this software without prior written permission. For written
  *    permission, please contact apache@apache.org.
  *
  * 5. Products derived from this software may not be called "Apache"
  *    nor may "Apache" appear in their names without prior written
  *    permission of the Apache Group.
  *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * ====================================================================
  *
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Apache Software Foundation.  For more
  * information on the Apache Software Foundation, please see
  * <http://www.apache.org/>.
  *
  */
  
  package org.apache.struts.webapp.upload;
  
  import javax.servlet.http.HttpServletRequest;
  
  import org.apache.struts.action.ActionErrors;
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionMapping;
  import org.apache.struts.action.ActionMessage;
  import org.apache.struts.upload.FormFile;
  import org.apache.struts.upload.MultipartRequestHandler;
  
  /**
   * This class is a placeholder for form values.  In a multipart request, files are represented by
   * set and get methods that use the class org.apache.struts.upload.FormFile, an interface with
   * basic methods to retrieve file information.  The actual structure of the FormFile is dependant
   * on the underlying impelementation of multipart request handling.  The default implementation
   * that struts uses is org.apache.struts.upload.CommonsMultipartRequestHandler.
   *
   * @author Mike Schachter
   * @version $Revision: 1.1 $ $Date: 2004/01/08 16:17:57 $
   */
  public class UploadForm extends ActionForm {
      
      public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED =
          "org.apache.struts.webapp.upload.MaxLengthExceeded";
  
      /**
       * The value of the text the user has sent as form data
       */
      protected String theText;
  
      /**
       * The value of the embedded query string parameter
       */
      protected String queryParam;
  
      /**
       * Whether or not to write to a file
       */
      protected boolean writeFile;
  
      /**
       * The file that the user has uploaded
       */
      protected FormFile theFile;
  
      /**
       * The file path to write to
       */
      protected String filePath;
  
      /**
       * Retrieve the value of the text the user has sent as form data
       */
      public String getTheText() {
          return theText;
      }
  
      /**
       * Set the value of the form data text
       */
      public void setTheText(String theText) {
          this.theText = theText;
      }
  
      /**
       * Retrieve the value of the query string parameter
       */
      public String getQueryParam() {
          return queryParam;
      }
  
      /**
       * Set the value of the query string parameter
       */
      public void setQueryParam(String queryParam) {
          this.queryParam = queryParam;
      }
  
      /**
       * Retrieve a representation of the file the user has uploaded
       */
      public FormFile getTheFile() {
          return theFile;
      }
  
      /**
       * Set a representation of the file the user has uploaded
       */
      public void setTheFile(FormFile theFile) {
          this.theFile = theFile;
      }
  
      /**
       * Set whether or not to write to a file
       */
      public void setWriteFile(boolean writeFile) {
          this.writeFile = writeFile;
      }
  
      /**
       * Get whether or not to write to a file
       */
      public boolean getWriteFile() {
          return writeFile;
      }
  
      /**
       * Set the path to write a file to
       */
      public void setFilePath(String filePath) {
          this.filePath = filePath;
      }
  
      /**
       * Get the path to write a file to
       */
      public String getFilePath() {
          return filePath;
      }
  
      public void reset() {
          writeFile = false;
      }
  
      /**
       * Check to make sure the client hasn't exceeded the maximum allowed upload size inside of this
       * validate method.
       */
      public ActionErrors validate(
          ActionMapping mapping,
          HttpServletRequest request) {
              
          ActionErrors errors = null;
          //has the maximum length been exceeded?
          Boolean maxLengthExceeded =
              (Boolean) request.getAttribute(
                  MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
                  
          if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) {
              errors = new ActionErrors();
              errors.add(
                  ERROR_PROPERTY_MAX_LENGTH_EXCEEDED,
                  new ActionMessage("maxLengthExceeded"));
          }
          return errors;
  
      }
  }
  
  
  
  1.1                  jakarta-struts/src/examples/org/apache/struts/webapp/upload/UploadAction.java
  
  Index: UploadAction.java
  ===================================================================
  /*
  * $Header: /home/cvs/jakarta-struts/src/examples/org/apache/struts/webapp/upload/UploadAction.java,v 1.1 2004/01/08 16:17:57 husted Exp $
  * $Revision: 1.1 $
  * $Date: 2004/01/08 16:17:57 $
  *
  * ====================================================================
  *
  * The Apache Software License, Version 1.1
  *
  * Copyright (c) 1999-2003 The Apache Software Foundation.  All rights
  * reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
  *
  * 3. The end-user documentation included with the redistribution, if
  *    any, must include the following acknowlegement:
  *       "This product includes software developed by the
  *        Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowlegement may appear in the software itself,
  *    if and wherever such third-party acknowlegements normally appear.
  *
  * 4. The names "The Jakarta Project", "Struts", and "Apache Software
  *    Foundation" must not be used to endorse or promote products derived
  *    from this software without prior written permission. For written
  *    permission, please contact apache@apache.org.
  *
  * 5. Products derived from this software may not be called "Apache"
  *    nor may "Apache" appear in their names without prior written
  *    permission of the Apache Group.
  *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * ====================================================================
  *
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Apache Software Foundation.  For more
  * information on the Apache Software Foundation, please see
  * <http://www.apache.org/>.
  *
  */
  
  package org.apache.struts.webapp.upload;
  
  
  import java.io.ByteArrayOutputStream;
  import java.io.FileNotFoundException;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  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.upload.FormFile;
  
  
  
  /**
   * This class takes the UploadForm and retrieves the text value
   * and file attributes and puts them in the request for the display.jsp
   * page to display them
   *
   * @author Mike Schachter
   * @version $Revision: 1.1 $ $Date: 2004/01/08 16:17:57 $
   */
  
  
  public class UploadAction extends Action
  {
      public ActionForward execute(ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
          throws Exception {
  
          if (form instanceof UploadForm) {
  
              //this line is here for when the input page is upload-utf8.jsp,
              //it sets the correct character encoding for the response
              String encoding = request.getCharacterEncoding();
              if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8")))
              {
                  response.setContentType("text/html; charset=utf-8");
              }
  
              UploadForm theForm = (UploadForm) form;
  
              //retrieve the text data
              String text = theForm.getTheText();
  
              //retrieve the query string value
              String queryValue = theForm.getQueryParam();
  
              //retrieve the file representation
              FormFile file = theForm.getTheFile();
  
              //retrieve the file name
              String fileName= file.getFileName();
  
              //retrieve the content type
              String contentType = file.getContentType();
  
              boolean writeFile = theForm.getWriteFile();
  
              //retrieve the file size
              String size = (file.getFileSize() + " bytes");
  
              String data = null;
  
              try {
                  //retrieve the file data
                  ByteArrayOutputStream baos = new ByteArrayOutputStream();
                  InputStream stream = file.getInputStream();
                  if (!writeFile) {
                      //only write files out that are less than 1MB
                      if (file.getFileSize() < (4*1024000)) {
  
                          byte[] buffer = new byte[8192];
                          int bytesRead = 0;
                          while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
                              baos.write(buffer, 0, bytesRead);
                          }
                          data = new String(baos.toByteArray());
                      }
                      else {
                          data = new String("The file is greater than 4MB, " +
                                  " and has not been written to stream." +
                                  " File Size: " + file.getFileSize() + " bytes. This is a" +
                                  " limitation of this particular web application, hard-coded" +
                                  " in org.apache.struts.webapp.upload.UploadAction");
                      }
                  }
                  else {
                      //write the file to the file specified
                      OutputStream bos = new FileOutputStream(theForm.getFilePath());
                      int bytesRead = 0;
                      byte[] buffer = new byte[8192];
                      while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
                          bos.write(buffer, 0, bytesRead);
                      }
                      bos.close();
                      data = "The file has been written to \"" + theForm.getFilePath() + "\"";
                  }
                  //close the stream
                  stream.close();
              }
              catch (FileNotFoundException fnfe) {
                  return null;
              }
              catch (IOException ioe) {
                  return null;
              }
  
              //place the data into the request for retrieval from display.jsp
              request.setAttribute("text", text);
              request.setAttribute("queryValue", queryValue);
              request.setAttribute("fileName", fileName);
              request.setAttribute("contentType", contentType);
              request.setAttribute("size", size);
              request.setAttribute("data", data);
  
              //destroy the temporary file created
              file.destroy();
  
              //return a forward to display.jsp
              return mapping.findForward("display");
          }
  
          //this shouldn't happen in this example
          return null;
      }
  }
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: struts-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-dev-help@jakarta.apache.org