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>
  • 相关阅读:
    Proj THUDBFuzz Paper Reading: The Art, Science, and Engineering of Fuzzing: A Survey
    Proj THUDBFuzz Paper Reading: A systematic review of fuzzing based on machine learning techniques
    9.3 付费代理的使用
    11.1 Charles 的使用
    第十一章 APP 的爬取
    10.2 Cookies 池的搭建
    10.1 模拟登录并爬取 GitHub
    11.5 Appium 爬取微信朋友圈
    11.4 Appium 的基本使用
    11.3 mitmdump 爬取 “得到” App 电子书信息
  • 原文地址:https://www.cnblogs.com/wujixing/p/4962239.html
Copyright © 2011-2022 走看看