• 文件的上传Commons FileUpload(web基础学习笔记十六)


    一、表单设置

    <form action="<%=request.getContextPath()%>/jsp/admin/doAdd.jsp" enctype="multipart/form-data" method="post">
    </form>

    设置属性:

    enctype="multipart/form-data";

    <tr>
    <td class="text_tabledetail2">上传图片 </td>
    <td><input type="file" name="picPath" value=""/></td>
    </tr>

    类型设置:type="file";

    表单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <%@ page language="java" import="java.util.*,com.pb.news.entity.*" pageEncoding="UTF-8"%>
    <html>
        <head>
            <link href="<%=request.getContextPath() %>/css/common.css" rel="stylesheet" type="text/css" />
            <script type="text/javascript" src="<%=request.getContextPath() %>/ckeditor/ckeditor.js"></script>
        </head>
    
    <body>
    <form name ="dataForm" id="dataForm" action="<%=request.getContextPath()%>/jsp/admin/doAdd.jsp" method="post"  enctype="multipart/form-data">
        <table class="tb" border="0" cellspacing="5" cellpadding="0">
            <thead>
                <tr><td align="center" colspan="2" class="text_tabledetail2">增加新闻</td></tr>
            </thead>
            <tbody>
                <tr>
                    <td class="text_tabledetail2">分类</td>
                    <td>
                    <!-- 列出所有的新闻分类 -->
                        <select name="categoryId">
                            <option value="1">国内</option>
                            <option value="2">国际</option>
                            <option value="3">娱乐</option>
                            <option value="4">军事</option>
                            <option value="5">财经</option>
                            <option value="6">天气</option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td class="text_tabledetail2">标题</td>
                    <td><input type="text" name="title" value=""/></td>
                </tr>
                <tr>
                    <td class="text_tabledetail2">作者</td>
                    <td><input type="text" name="author" value=""/></td>
                </tr>
                
                <tr>
                    <td class="text_tabledetail2">摘要</td>
                    <td><textarea id="summary" name="summary" rows="8" cols="50"></textarea></td>
                </tr>
                <tr>
                    <td class="text_tabledetail2">内容</td>
                    <td>
                    <div id="xToolbar"></div>
                    <textarea id="newscontent" name="newscontent" class="ckeditor" rows="8"></textarea>
                    </td>
                </tr>
                <tr>
                    <td class="text_tabledetail2">上传图片 </td>
                    <td><input type="file" name="picPath" value=""/></td>
                </tr>
                <tr>
                    <td style="text-align:center;" colspan="2">
                        <button type="submit" class="page-btn" name="save">保存</button>
                        <input type="hidden" name="id" value=""/>
                        <button type="button" class="page-btn" name="return" onclick="javascript:location.href='newsDetailList.jsp'">返回</button>
                    </td>
                </tr>
            </tbody>
        </table>
    </form>
    </body>
    
    </html>

    二、下载控件导入

    http://commons.apache.org/

    采用apache的开源工具common-fileupload这个文件上传组件,

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

    common-fileupload是依赖于common-io这个包的,所以还需要下载这个包。

    Download Commons IO:http://commons.apache.org/proper/commons-io/download_io.cgi

    下载以上2个控件并导入

    三、提交页面

    doAdd.jsp

    <%@page import="java.io.File"%>
    <%@page import="org.apache.commons.fileupload.FileItem"%>
    <%@page import="java.util.List"%>
    <%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
    <%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
    <%@page import="java.util.Date"%>
    <%@page import="com.pb.news.entity.News"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@include file="../common/common.jsp"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            //设置页面编码 
        request.setCharacterEncoding("utf-8");
        boolean bRet = false;
        boolean bUpload = false;
        String uploadFileName = "";
        String fieldName = "";
        //声明News对象
        News news=new News();
        //设置创建时间
        news.setCreateDate(new Date());
        //判断表单个是否有多个部分组成,将整个请求做做为判断
        boolean isMultipart=ServletFileUpload.isMultipartContent(request);
        //得到上传文件的保存目录,
        //String uploadpath=this.getServletContext().getRealPath("/upload/");
        String uploadFilePath=request.getSession().getServletContext().getRealPath("/upload/");
        //判断是表单是否为多部分组成
        if(isMultipart==true){
            //使用Apache文件上传组件处理文件上传步骤:
            //1、创建一个DiskFileItemFactory工厂
            DiskFileItemFactory factory=new DiskFileItemFactory();
            //2、创建一个文件上传解析器
            ServletFileUpload upload=new ServletFileUpload(factory);
            try{
        //3、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
            List<FileItem> items=upload.parseRequest(request);
             //遍历集合
             for(FileItem item:items){
                //如果是普通的数据
                if(item.isFormField()){
                  //得到集合元素
                  fieldName=item.getFieldName();
                  //判断
                  if(fieldName.equals("title")){
                      //如果是标题,就设置新闻标题,并将字符集设置为utf-8
                      news.setTitle(item.getString("utf-8"));
                      //如果是ID则
                  }else if(fieldName.equals("id")){
                       //获取ID
                String id = item.getString();
                       //判断ID是还为空
                if (id != null && !id.equals("")){
                    news.setId(Integer.parseInt(id));
                }
                       //类别,强制类型转换
            }else if (fieldName.equals("categoryId")){
                news.setCategoryId(Integer.parseInt(item.getString()));
                //如果是摘要,设置字符编码
            }else if (fieldName.equals("summary")){
                news.setSummary(item.getString("UTF-8"));
                //如果是内容,设置字符编码
            }else if (fieldName.equals("newscontent")){
                news.setContent(item.getString("UTF-8"));
                //如果是作者名称,设置字符编码
            }else if(fieldName.equals("author")){
                news.setAuthor(item.getString("UTF-8"));
            }
                    //如果是上传数据
                }else{
                    //得到集合元素
                    String fileName = item.getName();
                    //判断是否为空
                    if(fileName!=null&&!fileName.equals("")){
                        //不是空得到文件名
                        File fullFile=new File(item.getName());
                        //保存路径 和名字
                        File saveFile = new File(uploadFilePath, fullFile.getName());
                        //写入文件
                        item.write(saveFile);
                        //上传的文件名
                        uploadFileName = fullFile.getName();
                        //设置新闻图片牟路径和名字
                        news.setPicPath(uploadFileName);
                        //上传成功
                        bUpload = true;                
                    }
                    
                }
             }
                
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        System.out.println("上传成功后的文件名是::"+news.getPicPath());
    
        //调用后台方法,将新闻信息插入数据库
        bRet=newsService.addNews(news);
    
        %>
        <%
        //判断是还上传成功
    if (bRet) {
        //成功就跳转到列表页面
        response.sendRedirect("newsDetailList.jsp");
    } else {
        //返回添加的页面
        response.sendRedirect("newsDetailCreate.jsp");
    }
    %>
    </body>
    </html>

     四、设置文件大小和类型

    4.1、html页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <!-- 声明表单属性为enctype=multipart/form-data -->
    <form action="doupload.jsp" method="post" enctype="multipart/form-data">
    <table>
    <tr>
    <td>上传者</td>
    <td><input type="text" name="username"/></td>
    </tr>
    <tr>
    <!-- 设置类型为file -->
    <td colspan="2"><input type="file" name="filename"/></td>
    </tr>
    <tr>
    <td><input type="submit" value="提交" /></td>
    </tr>
    </table>
    </form>
    <%
    //判断请求是还为空
    Object name=request.getAttribute("name");
    if(name!=null){
        out.println(name.toString()+"<br/>");
    }
    //判断请求是还为空
    Object msg=request.getAttribute("msg");
    if(msg!=null){
        out.println(msg.toString()+"<br/>");
    }
    //判断请求是还为空
    Object imgsrc=request.getAttribute("imgsrc");
    if(imgsrc!=null){
        out.println(imgsrc.toString()+"<br/>");
        out.println("<img src='"+imgsrc.toString()+"'/>");
    }
    
    %>
    
    
    </body>
    </html>

    4.2 、JSP页面

    <%@page import="java.io.File"%>
    <%@page import="java.util.Date"%>
    <%@page import="java.text.SimpleDateFormat"%>
    <%@page import="java.util.ArrayList"%>
    <%@page import="org.apache.commons.fileupload.FileItem"%>
    <%@page import="java.util.List"%>
    <%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
    <%@page import="org.apache.commons.fileupload.FileItemFactory"%>
    <%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <%
    //设置出字符编码
    request.setCharacterEncoding("UTF-8");
    //判断整个请求做为参数,是不中有多部分组成
    boolean isMutipart=ServletFileUpload.isMultipartContent(request);
    //设置允许上传的文件格式
    List<String> filelist=new ArrayList<String>();
    filelist.add(".jpg");
    filelist.add(".png");
    filelist.add(".gif");
    if(isMutipart==true){
        //创建磁盘工厂类
        FileItemFactory factory=new DiskFileItemFactory();
        //创建上传文件解析器
        ServletFileUpload upload=new ServletFileUpload(factory);
        //将整个请求做为一个集合
        List<FileItem> items=upload.parseRequest(request);
        //遍历
        for(FileItem item:items){
            if(item.isFormField()){
                //如果是普通表单按普通表单处理
                //String username=item.getFieldName();
                String name=item.getString("utf-8");
                request.setAttribute("name", name);
                
            }else{
                //如果是上传文件
                //获取文件名称
                String filename=item.getName();
                //获取文件扩展名
                String fileext=filename.substring(filename.lastIndexOf("."));
                //判断扩展名
                if(filelist.contains(fileext)){
                    //判断文件大小小于1M可以上传
                    if(item.getSize()<1024*1024){
                        //获取文件上传路径
                        String uploadpath=this.getServletContext().getRealPath("upload");
                        //对文件重命名
                        SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddhhmmss");
                        //当前时间加扩展名
                        String newfilename=sdf.format(new Date())+fileext;
                        //文件对象
                        File savefile=new File(uploadpath,newfilename);
                        //开始上传
                        item.write(savefile);
                        request.setAttribute("msg", "上传成功");
                        request.setAttribute("imgsrc", "../upload/"+newfilename);
                    }else{
                        //判断文件大小大于512K可以上传
                        //提示错误类型
                    request.setAttribute("msg","文件只能上传1M以下的 !");
                    }
                }else{
                    //提示错误类型
                    request.setAttribute("msg", "只能上传jpb,png,gif的图片");
                }
            }
            
        }
        //转发到上传页面
        request.getRequestDispatcher("uploadtest.jsp").forward(request, response);
    }
    
    %>
    
    </body>
    </html>
  • 相关阅读:
    对Promise的研究4
    对Promise的研究3
    对Promise的研究2
    对promise的研究1
    数据结构_栈
    数据结构_队列(普通队列和双端队列)
    数据结构_链表(单链表,单向循环链表,双链表)
    数据库进行参数化,查询一行或多行语句
    数据库基础应用
    选择排序
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4261355.html
Copyright © 2020-2023  润新知