/**
 * 以下是Action coding
 */
public class UploadAction extends Action {        public ActionForward perform(ActionMapping mapping,
                                     ActionForm    form,
                                     HttpServletRequest request,
                                     HttpServletResponse response) {                if (form instanceof UploadForm) {                        UploadForm theForm = (UploadForm) form;                        //retrieve the text data
                        String text = theForm.getTheText();                        //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("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;
        }
}/**
 * 以下是Form coding
 */
import org.apache.struts.upload.FormFile;
import org.apache.struts.action.ActionForm;
/**
 * 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.DiskMultipartRequestHandler.
 *
 * @author Mike Schachter
 * @version $Revision: 1.3 $ $Date: 2001/04/14 12:54:09 $
 */public class UploadForm extends ActionForm {        /**
         * The value of the text the user has sent as form data
         */
        protected String theText;        /**
         * 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 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;
        }
}