文件的上传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>
时间: 2024-10-06 09:45:48

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

JSTL 标签库 使用(web基础学习笔记十九)

标签库概要: 一.C标签库介绍 1.1.<c:> 核心标签库  JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:1.表达式控制标签:out.set.remove.catch2.流程控制标签:if.choose.when.otherwise3.循环标签:forEach.forTokens4.URL操作标签:import.url.redirect 二.表达式控制标签 2.1.out标签 <c:out value="" escapeXml="&quo

JavaBean(web基础学习笔记十二)

一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用, 有以下的优点: 可将HTML和Java代码分离,这主要是为了日后维护的方便.如果把所有的程序代码(HTML和Java)写到JSP 页面中,会使整个程序代码又多又复杂,造成日后维护上的困难. 可利用JavaBean的优点.将常用到的程序写成JavaBean组件,当在JSP要使用时,只要调用Java

Java中执行存储过程和函数(web基础学习笔记十四)

一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableStatement 接口包含有Statement 接口和PreparedStatement 接口定义的全部方法,但是并不是所有的方法我们都要使用,主要使用的方法有这样几个: CallableStatement 常用方法: 返回类型 方法签名 说明 boolean execute() 执行 SQL 语句

JSTL标签引入(web基础学习笔记十八)

一.JSTL包下载和引入 1.0.简介 JSTL全名为JavaServer Pages Standard Tag Library 1.1.下载包 下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/ 1.2.解压 1.3.将lib下的2个jar文件复制到项目WEB-INFO/lib文件夹下 1.4.选择项目buildpath-将包引入 1.5.新建jsp页面将包引入 在页面中加入以下指令: <%@ tagli

页面可视化编辑ckeditor(web基础学习笔记十五)

一.CKedit下载ckedit 下载地址:http://ckeditor.com/ 二.ckedit的引入 2.1.解压并将ckedit复制到项目中 2.2.在页面中引入 在页面头部加入 <script type="text/javascript" src="<%=request.getContextPath()%>/ckeditor/ckeditor.js"></script> 2.3.在需要使用ckedit的标签中添加cla

JDBC四(web基础学习笔记十)

一.增加 .修改.删除.查询 将功能整合在一个类中 package pb.base; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import pb.until.ConfigManager

Java基础学习笔记十六 集合框架(二)

List List接口的特点: 它是一个元素存取有序的集合.例如,存元素的顺序是11.22.33.那么集合中,元素的存储就是按照11.22.33的顺序完成的. 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理). 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素. List接口的常用子类有: ArrayList集合 LinkedList集合 List接口的特有方法(带索引的方法)1.增加元素方法 add(Object e):向集合末尾

JSP实现数据传递(web基础学习笔记三)

get和post的区别: JSP内置对象: 1)out内置对象:out内置对象是在JSP开发过程中使用得最为频繁的对象,然而其使用起来也是最简单的.out对象用于向客户端浏览器输出数                                                         据,out对象常用的方法是:print()或者println()方法,这两个方法用于在页面中打印出字符串信息. 2)request内置对象:request对象,JSP中的request内置对象对应了Ser

JSP的页面连接和提交方式(web基础学习笔记六)

一.GET请求新页面 1.1.超链接请求新页面 <!-- 超链接到page2 --> <a href="page2.jsp">链接到page2</a><br> <!-- 超链接到page2,弹出新窗口 --> <a href="page2.jsp" target="_blank">在窗口中链接到page2</a><br> <!-- 相对路径链接到