原理:由Servelt或者JavaBean获得客户端请求的输入流,然后从这个输入流中读取指定的文件,然后把文件保存到指定的位置。你可以使用SmartUpload工具,十分方便的,在你上传文件的jsp页面中,Form的属性中,方法必须是post,而且必须有enctype="multipart/form-data"属性,否则就不能上传文件的.

解决方案 »

  1.   

    你可以用jspSmartUpload组件,这是一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。给你一个具体的例子:
    1、上传页面upload.html 本页面提供表单,让用户选择要上传的文件,点击"上传"按钮执行上传操作。 页面源码如下: <!-- 
    文件名:upload.html 
     
    --> 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    <html> 
    <head> 
    <title>文件上传</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
    </head> <body> 
    <p> </p> 
    <p align="center">上传文件选择</p> 
    <FORM METHOD="POST" ACTION="jsp/do_upload.jsp" 
    ENCTYPE="multipart/form-data"> 
    <input type="hidden" name="TEST" value="good"> 
    <table width="75%" border="1" align="center"> 
    <tr> 
    <td><div align="center">1、 
    <input type="FILE" name="FILE1" size="30"> 
    </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> 2、上传处理页面do_upload.jsp 本页面执行文件上传操作。页面源码中详细介绍了上传方法的用法,在此不赘述了。 页面源码如下: <%-- 
    文件名:do_upload.jsp --%> 
    <%@ page contentType="text/html; charset=gb2312" language="java" 
    import="java.util.*,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("/upload"); 
    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> 
      

  2.   

    喔,怎么把文件上传到输入流中呢?毕竟jsp是服务器端的程序啊!!!
      

  3.   

    只是JSP的话,建议用SmartUpload,
    如果用STRUTS,用<html:file>标签!
      

  4.   

    我好像有点明白了,还是利用html的上载控件对吗?