zoukankan      html  css  js  c++  java
  • 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.57lib 和 

    D:Program FilesJavajdk1.7.0_45jrelibext

    开始开发

    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>
  • 相关阅读:
    MyBatis配置文件(四)--typeHandlers
    MyBatis配置文件(三)--typeAliases别名
    理解JWT的使用场景和优劣
    JWT的使用流程
    JWT (JSON WEB Token)正确使用场景
    转 Spring Security 简介
    转 Solr vs. Elasticsearch谁是开源搜索引擎王者
    Oauth2.0(一):为什么需要 Oauth2.0 协议?
    Spring Security 与 OAuth2(介绍)
    理解OAuth 2.0
  • 原文地址:https://www.cnblogs.com/wujixing/p/4962239.html
Copyright © 2011-2022 走看看