哪位大哥能给一个jsp实现上传文件功能的例子啊,我在网上搜了点资料,如下:
代码如下:test.html<%@ page language="java" import="java.util.*" contentType="text/html;charset=gbk" pageEncoding="gbk"%><html><body>    <form action="MultipartTestServlet" enctype="multipart/form-data" method="post">     <input type="text" name="username" /><br />     <input type="file" name="myfile" /><br/>     <input type="file" name="myfile" /><br/>     <input type="submit" />    </form>    <br/><br/><br/><br/>    <form action="MultipartTestServlet2" enctype="multipart/form-data" method="post">     <input type="text" name="username" /><br />     <input type="file" name="myfile" /><br/>     <input type="file" name="myfile" /><br/>     <input type="submit" />    </form>    <br/><br/><br/><br/>    <form action="MultipartTestServlet3" enctype="multipart/form-data" method="post">     <input type="text" name="username" /><br />     <input type="file" name="myfile" /><br/>     <input type="file" name="myfile" /><br/>     <input type="submit" />    </form></body></html>//方法一、采用ServletFileUpload这种方式上传MultipartTestServlet.javapackage com.bug.servlet;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUpload;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.RequestContext;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.fileupload.servlet.ServletRequestContext;public class MultipartTestServlet extends HttpServlet {public MultipartTestServlet() {super();}public void doPost(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {request.setCharacterEncoding("gbk");RequestContext requestContext = new ServletRequestContext(request);if(FileUpload.isMultipartContent(requestContext)){      DiskFileItemFactory factory = new DiskFileItemFactory();   factory.setRepository(new File("c:/tmp/"));   ServletFileUpload upload = new ServletFileUpload(factory);   //upload.setHeaderEncoding("gbk");   upload.setSizeMax(2000000);   List items = new ArrayList();    try {     items = upload.parseRequest(request);    } catch (FileUploadException e1) {     System.out.println("文件上传发生错误" + e1.getMessage());    }   Iterator it = items.iterator();   while(it.hasNext()){    FileItem fileItem = (FileItem) it.next();    if(fileItem.isFormField()){           System.out.println(fileItem.getFieldName() + "   " + fileItem.getName() + "   " + new String(fileItem.getString().getBytes("iso8859-1"), "gbk"));    }else{     System.out.println(fileItem.getFieldName() + "   " +         fileItem.getName() + "   " +         fileItem.isInMemory() + "    " +         fileItem.getContentType() + "   " +         fileItem.getSize());          if(fileItem.getName()!=null && fileItem.getSize()!=0){      File fullFile = new File(fileItem.getName());      File newFile = new File("c:/temp/" + fullFile.getName());      try {       fileItem.write(newFile);      } catch (Exception e) {       e.printStackTrace();      }     }else{      System.out.println("文件没有选择 或 文件内容为空");     }    }        }}}}里面好多方法都不明白什么意思,我看javadoc都是英文的,能给我解释一下里面的方法也行,如果有更简单的实现上传的更好,谢谢

解决方案 »

  1.   

    关于上传下载也算是老问题了,不妨站内搜下,我这有篇转载的,看看吧,都有注释,写得比较详细了
    http://dev.csdn.net/article/73/73652.shtm
      

  2.   

    struts本身支持上传和下载功能
    jsp:<%@ page contentType="text/html; charset=Windows-31J"%>
    <%@ taglib uri="/struts-html" prefix="html" %>
    <%@ taglib uri="/struts-logic" prefix="logic" %><html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
    <title>upload</title>
    </head>
    <body>
          <html:form action="/FileUpLoadAction" enctype="multipart/form-data">
            <table >
              <tr height="100">
              </tr>
              <tr align="left" height="25">
                <td style="font-size:16;font-weight: bold;">file select</td>
              </tr>
              <tr align="center" style="font-size:15;font-weight: bold;" height="25">
                <td width="150" height="23"><html:file property="formFile" size="120"></html:file>  </td>
              </tr>
              <tr height="259"><td>  </td>
              </tr>
              <tr>
                <td>
                  <table cellpadding="5" cellspacing="2" border="0" bordercolor="white" width="780px">
                  </table>
                </td>
              </tr>
              <tr>
                <td> </td>
              </tr>
            </table> 
            <table width="780px" border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td colspan="13" width="780px"> </td>
              </tr>
              <tr>
              </tr>
              <tr>
                <td colspan="13" width="780px"> </td>
              </tr>
              <tr>
                <td width="114">
                <td width="6"> </td>
                <td width="114"> </td>
                <td width="6"> </td>
                <td width="114"> </td>
                <td width="6"> </td>
                <td width="114"> </td>
                <td width="6"> </td>
                <td width="114"> </td>
                <td width="6"> </td>
                <td width="114"> </td>
                <td width="6"> </td>
                <td width="116">
                <input type="submit" name="btn1" id="jikou"  value="実行" />
                </td>
              </tr>
            </table>
          </html:form>
    </body>
    </html>
      

  3.   

    form:package sources;import org.apache.struts.action.ActionForm;
    import org.apache.struts.upload.FormFile;public class FileUploadForm extends ActionForm{    /**
         * strutsのFormFile機能で、一時保存のファイル
         */
        private FormFile formFile = null;    /**
         * formFileを取得する
         *
         * @return formFile
         */
        public final FormFile getFormFile() {
            return formFile;
        }    /**
         * formFileを設定する
         *
         * @param formFile 設定するformFile
         */
        public final void setFormFile(FormFile formFile) {
            this.formFile = formFile;
        }
    }
      

  4.   

    action:package sources;import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;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.upload.FormFile;public class FileUpLoadAction extends Action {

        /**
         * ログインスタンス。
         */
        private static Log log = LogFactory.getLog(FileUpLoadAction.class);
        
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) throws Exception {
    // 自動生成されたメソッド・スタブ

    FileUploadForm fileForm = (FileUploadForm)form;

    FormFile formFile = fileForm.getFormFile();
    System.out.println("formName:" + formFile);

    String saveFile = "C:\\test.txt";

            InputStreamReader isr = new InputStreamReader(formFile.getInputStream(),"MS932");        
            BufferedReader buf = new BufferedReader(isr);
            
            File file = new File(saveFile);
            OutputStream os = new FileOutputStream(file);
            
            String inputLine = null;
            while((inputLine=buf.readLine())!=null){
                os.write(inputLine.getBytes("UTF-8"));
            }
            
            if(log.isDebugEnabled()) {
             log.debug("uploadend");
            }
            isr.close();
            buf.close();
            os.close();
            
    return mapping.findForward("success");

    }
    }
      

  5.   

    uploadFile.jsp ------ uploadSucceed.do 是strtus配置的跳转页面比如是success.jsp
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    <%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
    <%@ page pageEncoding="GB2312" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html:html>
    <head>
    <title>文件上传</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head><body>
    <p>&nbsp;</p>
    <p align="center">上传文件选择</p>
    <form method="post" action="uploadSucceed.do" enctype="multipart/form-data">
      <table width="75%" border="1" align="center">
        <tr> 
          <td><div align="center">1、 
              <input type="FILE" name="FILE1" size="30">
             <input type="hidden" name="name">
            </div></td>
        </tr>
        <tr> 
          <td><div align="center">2、 
              <input type="FILE" name="FILE2" size="30">
            </div></td>
        </tr>
        <tr> 
          <td><div align="center">3、 
              <input type="FILE" name="FILE3" size="30">
            </div></td>
        </tr>
        <tr> 
          <td><div align="center">4、 
              <input type="FILE" name="FILE4" size="30">
            </div></td>
        </tr>
        <tr> 
          <td><div align="center">
              <input type="submit" name="Submit" value="上传它!">
            </div></td>
        </tr>
      </table>
    </form>
    </body>
    </html:html>------------success.jsp
    <%@ page contentType="text/html; charset=gb2312" language="java"
    import="java.util.*,org.apache.commons.fileupload.*,java.io.*,org.apache.commons.lang.*,com.jspsmart.upload.*"
    errorPage=""%><html>
    <head>
    <title>文件上传处理页面</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head> <body>
    <%
    // 新建一个SmartUpload对象
    SmartUpload su = new SmartUpload();
    // 上传初始化
    su.initialize(pageContext);
    // 设定上传限制
    // 1.限制每个上传文件的最大长度。
    // su.setMaxFileSize(10000);
    // 2.限制总上传数据的长度。
    // su.setTotalMaxFileSize(20000);
    // 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。
    // su.setAllowedFilesList("doc,txt");
    // 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,
    //jsp,htm,html扩展名的文件和没有扩展名的文件。
    // su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
    // 上传文件

    su.upload();
    // 将上传文件全部保存到指定目录
    int count = su.save("D:/temp");
    out.println(count+"个文件上传成功!<br>");

    // 利用Request对象获取参数之值
    //out.println("TEST="+su.getRequest().getParameter("TEST")
    //+"<BR><BR>"); // 逐一提取上传文件信息,同时可保存文件。
    for (int i=0;i<su.getFiles().getCount();i++)
    {
    com.jspsmart.upload.File file = su.getFiles().getFile(i);

    // 若文件不存在则继续
    if (file.isMissing()) continue; // 显示当前文件信息
    out.println("<TABLE BORDER=1>");
    out.println("<TR><TD>表单项名(FieldName)</TD><TD>"
    + file.getFieldName() + "</TD></TR>");
    out.println("<TR><TD>文件长度(Size)</TD><TD>" + 
    file.getSize() + "</TD></TR>");
    out.println("<TR><TD>文件名(FileName)</TD><TD>" 
    + file.getFileName() + "</TD></TR>");
    out.println("<TR><TD>文件扩展名(FileExt)</TD><TD>" 
    + file.getFileExt() + "</TD></TR>");
    out.println("<TR><TD>文件全名(FilePathName)</TD><TD>"
    + file.getFilePathName() + "</TD></TR>");
    out.println("</TABLE><BR>"); // 将文件另存
    // file.saveAs("/upload/" + myFile.getFileName());
    // 另存到以WEB应用程序的根目录为文件根目录的目录下
    // file.saveAs("/upload/" + myFile.getFileName(), 
    //su.SAVE_VIRTUAL);
    // 另存到操作系统的根目录为文件根目录的目录下
    // file.saveAs("c:\\temp\\" + myFile.getFileName(), 
    //su.SAVE_PHYSICAL); }
    %>

    </body>
    </html>
      

  6.   

    核心的就是那三个东西,struts-config.xml你自己配置一下
    注意:<controller maxFileSize="800K" bufferSize="400K" nocache="true"
    processorClass="org.apache.struts.action.RequestProcessor" />
      

  7.   

    问一下,是不是不在 File fullFile = new File(fileItem.getName()); 
    后写 fileItem.write(fullFile); 就不会写入文件!还有那是不是创建了一个
    多余的文件吗?