在Struts中提供了一个专门的上传组件,
SmartUpload组件上传的时候使用的依然是HTMl标签,
所以搜的内容首先还是要被提交到ActionForm之中,
在ActionForm中通过一个FormFile的类型,去接受上传的文件。用户必须自己编写IO流,才能操作成功。

解决方案 »

  1.   

    Upload.jsp<%@ page language="java" pageEncoding="GBK"%>
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
    <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
    <html:html lang="true">
      <head>
        <title>Upload.jsp</title>
      </head>
      
      <body>
        <html:form action="upload.do" method="post" enctype="multipart/form-data">
         文件的名称:<html:text property="name"></html:text><br>
         选择上传的文件:<html:file property="pic"></html:file><br>
         <html:submit value="上传"/>
        </html:form>
      </body>
    </html:html>
      

  2.   

    UploadForm.java/*
     * Generated by MyEclipse Struts
     * Template path: templates/java/JavaClass.vtl
     */
    package org.lxh.struts.form;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.upload.FormFile;/** 
     * MyEclipse Struts
     * Creation date: 06-06-2007
     * 
     * XDoclet definition:
     * @struts.form name="uploadForm"
     */
    public class UploadForm extends ActionForm {
    /*
     * Generated Methods
     */
    private FormFile pic ;
    private String name ;
    /** 
     * Method validate
     * @param mapping
     * @param request
     * @return ActionErrors
     */
    public ActionErrors validate(ActionMapping mapping,
    HttpServletRequest request) {
    // TODO Auto-generated method stub
    return null;
    } /** 
     * Method reset
     * @param mapping
     * @param request
     */
    public void reset(ActionMapping mapping, HttpServletRequest request) {
    // TODO Auto-generated method stub
    } public FormFile getPic() {
    return pic;
    } public void setPic(FormFile pic) {
    this.pic = pic;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    }
    }
      

  3.   

    UploadAction.javaUploadAction.java/*
     * Generated by MyEclipse Struts
     * Template path: templates/java/JavaClass.vtl
     */
    package org.lxh.struts.action;import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    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;
    import org.lxh.struts.form.UploadForm;/** 
     * MyEclipse Struts
     * Creation date: 06-06-2007
     * 
     * XDoclet definition:
     * @struts.action path="/upload" name="uploadForm" input="/form/upload.jsp" scope="request" validate="true"
     */
    public class UploadAction extends Action {
    /*
     * 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) {
    UploadForm uploadForm = (UploadForm) form;// TODO Auto-generated method stub
    // 在编写IO流的时候必须有一个明确的绝对路径
    // 可是对于WEB程序而言,绝对路径不是固定的

    String uploadPath = this.getServlet().getServletContext().getRealPath("/")+"upload\\"+uploadForm.getName()+"."+(uploadForm.getPic().getFileName().split("\\.")[1]) ;
    System.out.println("** "+uploadPath) ;
    try {
    OutputStream out = new FileOutputStream(new File(uploadPath)) ;
    FormFile ff = uploadForm.getPic() ;
    byte b[] = ff.getFileData() ;
    out.write(b) ;
    out.close() ;
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return null;
    }
    }
      

  4.   

    上面已经很清楚了,楼主参考一下,这是我前几天用Struts写的一个上传的例子