求一个 获得上传文件名的例子调试成功,马上给分~

解决方案 »

  1.   

    用fileupload处理文件上传
      Commons是Apache开放源代码组织中的一个Java子项目,该项目主要涉及一些开发中常用的模块,例如文件上传、命令行处理、数据库连接池、XML配置文件处理等。这些项目集合了来自世界各地软件工程师的心血,其性能、稳定性等方面都经受得住实际应用的考验。有效地利用这些项目将会给开发带来显而易见的效果。Fileupload就是其中用来处理HTTP文件上传的子项目。本文主要介绍如何使用Fileupload来处理浏览器提交到服务器的文件信息。 
      为了让首次接触Fileupload的开发人员能够更直观的理解该项目,我们将实现一个简单的文件上传功能,并一步步介绍开发步骤,以及详细的代码。 
      环境准备 
      1. 下载并安装Tomcat(已经有很多关于Tomcat安装以及使用的文章,在这里不再介绍); 
      2. 下载File upload的jar包commons-fileupload-1.0-beta-1.jar,并将该文件拷贝到{$TOMCAT}/common/lib目录下(其中{$TOMCAT}为Tomcat的安装目录); 
      3. 由于Fileupload子项目同时要用到另外一个项目commons-Beanutils,所以必须下载Beanutils,并将解压后的文件commons-beanutils.jar拷贝到{$TOMCAT}/common/lib目录下。 
      开发文件上传页面 
      文件上传的界面如图1所示。为了增加效率我们设计了三个文件域,同时上传三个文件。   图1 文件上传界面 
      页面的HTML代码如下:
    <html>
    <head>
    <title>文件上传演示</title>
    </head>
    <body bgcolor=“#FFFFFF”text=“#000000” leftmargin=“0”topmargin=“40”marginwidth=“0” marginheight=“0”>
    <center>
    <h1>文件上传演示</h1>
    <form name=“uploadform”method=“POST” action=“save.jsp”ENCTYPE=“multipart/form-data”>
     <table border=“1”width=“450”cellpadding=“4” cellspacing=“2”bordercolor=“#9BD7FF”>
     <tr><td width=“100%”colspan=“2”>
     文件1:<input name=“file1”size=“40”type=“file”>
     </td></tr>
     <tr><td width=“100%”colspan=“2”>
     文件2:<input name=“file2”size=“40”type=“file”>
     </td></tr>
     <tr><td width=“100%”colspan=“2”>
     文件3:<input name=“file3”size=“40”type=“file”>
     </td></tr>
     </table>
     <br/><br/>
     <table>
     <tr><td align=“center”><input name=“upload” type=“submit”value=“开始上传”/></td></tr>
     </table>
    </form>
    </center>
    </body>
    </html>
      代码中要特别注意的是黑体处。必须保证表单的ENCTYPE属性值为multipart/form-data,这样浏览器才能正确执行上传文件的操作。 
      处理上传文件信息 
      由于本文主要是讲述如何使用Commons-fileupload,所以为了便于修改、调试,上传文件的保存使用一个JSP文件来进行处理。我们将浏览器上传来的所有文件保存在一个指定目录下并在页面上显示所有上传文件的详细信息。保存页面处理结果见图2所示。   图2 保存页面 
      下面来看看save.jsp的代码: 
    <%
    /**
    * 演示文件上传的处理
    * @author <a href=“mailto:[email protected]”>Winter Lau</a>
    * @version $Id: save.jsp,v 1.00 2003/03/01 10:10:15
    */
    %>
    <%@ page language=“java”contentType=“text/html;charset=GBK”%>
    <%@ page import=“java.util.*”%>
    <%@ page import=“org.apache.commons.fileupload.*”%>
    <html>
    <head>
    <title>保存上传文件</title>
    </head>
    <%
    String msg = “”;
    FileUpload fu = new FileUpload();
    // 设置允许用户上传文件大小,单位:字节
    fu.setSizeMax(10000000);
    // maximum size that will be stored in memory?
    // 设置最多只允许在内存中存储的数据,单位:字节
    fu.setSizeThreshold(4096);
    // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
    fu.setRepositoryPath(“C:\\TEMP”);
    //开始读取上传信息
    List fileItems = fu.parseRequest(request);
    %>
    <body bgcolor=“#FFFFFF”text=“#000000” leftmargin=“0”topmargin=“40”marginwidth=“0” marginheight=“0”>
    <font size=“6”color=“blue”>文件列表:</font>
    <center>
    <table cellpadding=0 cellspacing=1 border=1 width=“100%”>
    <tr>
    <td bgcolor=“#008080”>文件名</td>
    <td bgcolor=“#008080”>大小</td>
    </tr>
    <%
    // 依次处理每个上传的文件
    Iterator iter = fileItems.iterator();
    while (iter.hasNext()) {
      FileItem item = (FileItem) iter.next();
      //忽略其他不是文件域的所有表单信息
      if (!item.isFormField()) {
       String name = item.getName();
       long size = item.getSize();
       if((name==null||name.equals(“”)) && size==0)
       continue;
    %>
    <tr>
    <td><%=item.getName()%></td>
    <td><%=item.getSize()%></td>
    </tr>
    <%
       //保存上传的文件到指定的目录
       name = name.replace(‘:’,‘_’);
       name = name.replace(‘\\’,‘_’);
       item.write(“F:\\”+ name);
      }
    }
    %>
    </table><br/><br/>
    <a href=“upload.html”>返回上传页面</a>
    </center>
    </body>
    </html>  在这个文件中需要注意的是FileUpload对象的一些参数值的意义,如下面代码所示的三个参数sizeMax、sizeThreshold、repositoryPath:
    FileUpload fu = new FileUpload();
    // 设置允许用户上传文件大小,单位:字节
    fu.setSizeMax(10000000);
    // maximum size that will be stored in memory?
    // 设置最多只允许在内存中存储的数据,单位:字节
    fu.setSizeThreshold(4096);
    // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
    fu.setRepositoryPath(“C:\\TEMP”);  这3个参数的意义分别为: 
      SizeMax 用来设置上传文件大小的最大值,一旦用户上传的文件大小超过该值时将会抛出一个FileUploadException异常,提示文件太大; 
      SizeThreshold 设置内存中缓冲区的大小,一旦文件的大小超过该值的时候,程序会自动将其它数据存放在repositoryPath指定的目录下作为缓冲。合理设置该参数的值可以保证服务器稳定高效的运行; 
      RepositoryPath 指定缓冲区目录。 
      

  2.   

    用struts吧  很简单  这是个例子!
    jsp代码如下:  <html:form method="post" action="/upload.do" enctype="multipart/form-data">
       <table width="75%" border="1" align="center">
        <tr>
         <td>
          <div align="center">
           1、
           <html:file property="file1" size="30"/>
          </div>
         </td>
        </tr>
        <tr>
         <td>
          <div align="center">
           2、
           <html:file property="file2" size="30"/>
          </div>
         </td>
        </tr>
        <tr>
         <td>
          <div align="center">
           3、
           <html:file property="file3" size="30"/>
          </div>
         </td>
        </tr>
        <tr>
         <td>
          <div align="center">
           4、
           <html:file property="file4" size="30"/>
          </div>
         </td>
        </tr>
        <tr>
         <td>
          <div align="center">
           <html:submit>上传它!</html:submit>
          </div>
         </td>
        </tr>
       </table>
      </html:form>
      
    struts配置文件中配置动态ActionForm如下:
        <form-bean name="uploadForm" type="org.apache.struts.action.DynaActionForm">
          <form-property name="file3" type="org.apache.struts.upload.FormFile" />
          <form-property name="file1" type="org.apache.struts.upload.FormFile" />
          <form-property name="file4" type="org.apache.struts.upload.FormFile" />
          <form-property name="file2" type="org.apache.struts.upload.FormFile" />
        </form-bean>Action中处理上传的代码如下:
      DynaActionForm upForm = (DynaActionForm) form;
      String dir = this.getServlet().getServletContext().getRealPath("/upload/uploaded");
      FormFile fileOne = (FormFile)upForm.get("file1");
      FormFile fileTwo = (FormFile)upForm.get("file2");
      FormFile fileThree = (FormFile)upForm.get("file3");
      FormFile fileFour = (FormFile)upForm.get("file4");
      FormFile[] files = new FormFile[]{fileOne, fileTwo, fileThree, fileFour};
      List fileList = new ArrayList();
      for(int i = 0;i<files.length;i++){
       if(files[i] == null)
        continue;
       String fileName = files[i].getFileName();
       int size = files[i].getFileSize();
       try {
        InputStream streamIn = files[i].getInputStream();
        OutputStream streamOut = new FileOutputStream(dir + "/" + fileName);
        int bytesRead = 0;
        byte[] buffer = new byte[4096];
        while((bytesRead = streamIn.read(buffer, 0, 4096)) != -1)
         streamOut.write(buffer, 0, bytesRead);
        streamOut.close();
        streamIn.close();
       } catch (FileNotFoundException e) {
        e.printStackTrace();
        ActionMessages msgs = new ActionMessages();
        ActionMessage msg = new ActionMessage("error.upload.fail");
        msgs.add("error.upload.fail",msg);
        request.setAttribute(Globals.MESSAGE_KEY,msgs);
       } catch (IOException e) {
        e.printStackTrace();
        ActionMessages msgs = new ActionMessages();
        ActionMessage msg = new ActionMessage("error.upload.fail");
        msgs.add("error.upload.fail",msg);
        request.setAttribute(Globals.MESSAGE_KEY,msgs);
       }
       fileList.add(fileName);
       ActionMessages msgs = new ActionMessages();
       ActionMessage msg = new ActionMessage("error.upload.success");
       msgs.add("error.upload.success",msg);
       request.setAttribute(Globals.MESSAGE_KEY,msgs);
      }
      

  3.   

    对不起,类似的上传组件我有的。
    我想知道的是他怎么在同一页面得到上传文件名的源码
    而不是他已经打包好的JAR