JSP文件上传--FileUpload组件

如果使用上传操作,并且没有使用框架之类,最好使用Smartupload,因为FileUpdate太难使用。

下载组件:

fileupload包:http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi

commons包的io包以后框架开发中重要:http://commons.apache.org/proper/commons-io/download_io.cgi

解压后的jar文件还有servlet jar文件都放入到D:\apache-tomcat-7.0.57\lib 和 

D:\Program Files\Java\jdk1.7.0_45\jre\lib\ext

 

开始开发

fileupload_demo01.html:

<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<form action="fileupload_demo01.jsp" method="post" enctype="multipart/form-data"> 
    姓名:<input type="text" name="uname"><br>
    照片:<input type="file" name="pic"><br>
    <input type="submit" value="上传">
    <input type="reset" value="重置">
</form>
</body>
</html>

上传步骤:

1. 创建磁盘工厂:DiskFileItemFactory factory=new DiskFileItemFactory();

2. 创建处理工具: ServletFileUpload upload=new ServletFileUpload(factory);

3. 设置上传文件大小: upload.setFileSizeMax(3145728);

4. 接收全部内容: List<FileItem> items=upload.parseRequest(request);

fileupload_demo01.jsp:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
    DiskFileItemFactory factory = new DiskFileItemFactory() ;
    ServletFileUpload upload = new ServletFileUpload(factory) ;
    upload.setFileSizeMax(3 * 1024 * 1024) ;    // 只能上传3M
    List<FileItem> items = upload.parseRequest(request) ; // 接收全部内容
    Iterator<FileItem> iter = items.iterator() ;
    while(iter.hasNext()){
        FileItem item = iter.next() ;
        String fieldName = item.getFieldName() ;    // 取得表单控件的名称
%>
        <ul><h4><%=fieldName%> --> <%=item.isFormField()%></h4>
<%
        if(!item.isFormField()){        // 不是普通文本
            String fileName = item.getName() ;    // 取得文件的名称
            String contentType = item.getContentType() ;    // 文件类型
            long sizeInBytes = item.getSize() ;
%>
            <li>上传文件名称:<%=fileName%>
            <li>上传文件类型:<%=contentType%>
            <li>上传文件大小:<%=sizeInBytes%>
<%
        } else {
            String value = item.getString() ;
%>
            <li>普通参数:<%=value%>
<%
        }
%>        </ul>
<%
    }
%>
</body>
</html>

批量上传:

<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<form action="fileupload_demo02.jsp" method="post" enctype="multipart/form-data"> 
    姓名:<input type="text" name="uname"><br>
    照片:<input type="file" name="pic1"><br>
    照片:<input type="file" name="pic2"><br>
    照片:<input type="file" name="pic3"><br>
    <input type="submit" value="上传">
    <input type="reset" value="重置">
</form>
</body>
</html>

获取;

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*,java.io.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%@ page import="cn.mldn.lxh.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
    DiskFileItemFactory factory = new DiskFileItemFactory() ;
    factory.setRepository(new File(this.getServletContext().getRealPath("/") + "uploadtemp")) ;        // 更准确的说是一个临时文件
    ServletFileUpload upload = new ServletFileUpload(factory) ;
    upload.setFileSizeMax(3 * 1024 * 1024) ;    // 只能上传3M
    List<FileItem> items = upload.parseRequest(request) ; // 接收全部内容
    Iterator<FileItem> iter = items.iterator() ;
    IPTimeStamp its = new IPTimeStamp(request.getRemoteAddr()) ;
    while(iter.hasNext()){
        FileItem item = iter.next() ;
        String fieldName = item.getFieldName() ;    // 取得表单控件的名称
%>
        <ul><h4><%=fieldName%> --> <%=item.isFormField()%></h4>
<%
        if(!item.isFormField()){        // 不是普通文本
            File saveFile = null ;
            InputStream input = null ;
            OutputStream output = null ;
            input = item.getInputStream() ;
            output = new FileOutputStream(new File(this.getServletContext().getRealPath("/")+"upload"+File.separator+its.getIPTimeRand()+"."+item.getName().split("\\.")[1])) ;
            int temp = 0 ;
            byte data[] = new byte[512] ;
            while((temp=input.read(data,0,512))!=-1){
                output.write(data) ;    // 分块保存
            }
            input.close() ;
            output.close() ;
        } else {
            String value = item.getString() ;
%>
            <li>普通参数:<%=value%>
<%
        }
%>        </ul>
<%
    }
%>
</body>
</html>

此种处理方法有问题:

无法准确取得参数,无法取得一组参数,所有上传文件都需要依次判断,不能一次性批量保存,解决方案如下:

把FileUpload包装一下,FileUploadTools类:

fileupload_demo03.html:

<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<form action="fileupload_demo03.jsp" method="post" enctype="multipart/form-data"> 
    姓名:<input type="text" name="uname"><br>
    兴趣:<input type="checkbox" name="inst" value="Swing">游泳
            <input type="checkbox" name="inst" value="Song">唱歌
            <input type="checkbox" name="inst" value="Run">跑步<br>
            
    照片:<input type="file" name="pic1"><br>
    照片:<input type="file" name="pic2"><br>
    照片:<input type="file" name="pic3"><br>
    <input type="submit" value="上传">
    <input type="reset" value="重置">
</form>
</body>
</html>

fileupload_demo03.jsp:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*,java.io.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%@ page import="cn.mldn.lxh.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
    FileUploadTools fut = new FileUploadTools(request,3*1024*1024,this.getServletContext().getRealPath(".")+"uploadtemp") ;
    String name = fut.getParameter("uname") ;
    String inst[] = fut.getParameterValues("inst") ;
    List<String> all = fut.saveAll(this.getServletContext().getRealPath("/")+"upload"+java.io.File.separator) ;
%>
<h3>姓名:<%=name%><h3>
<h3>兴趣:
    <%
        for(int x=0;x<inst.length;x++){
%>
            <%=inst[x]%><%
        }
    %>
</h3>
<%
    Iterator<String> iter = all.iterator() ;
    while(iter.hasNext()){
%>
        <img src="../upload/<%=iter.next()%>">
<%
    }
%>
</body>
</html>

 

posted @ 2015-11-13 15:18  wujixing909  阅读(571)  评论(0编辑  收藏  举报