一、表单设置

<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>

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

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

    标签库概要: 一.C标签库介绍 1.1.<c:> 核心标签库  JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:1.表达式控制标签:out.set.remove.catch2 ...

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

    一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用 ...

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

    一.JSTL包下载和引入 1.0.简介 JSTL全名为JavaServer Pages Standard Tag Library 1.1.下载包 下载地址:http://archive.apache. ...

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

    一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...

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

    一.CKedit下载ckedit 下载地址:http://ckeditor.com/ 二.ckedit的引入 2.1.解压并将ckedit复制到项目中 2.2.在页面中引入 在页面头部加入 <s ...

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

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

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

    List List接口的特点: 它是一个元素存取有序的集合.例如,存元素的顺序是11.22.33.那么集合中,元素的存储就是按照11.22.33的顺序完成的. 它是一个带有索引的集合,通过索引就可以精 ...

  8. 风炫安全Web安全学习第十六节课 高权限sql注入getshell

    风炫安全Web安全学习第十六节课 高权限sql注入getshell sql高权限getshell 前提条件: 需要知道目标网站绝对路径 目录具有写的权限 需要当前数据库用户开启了secure_file ...

  9. 风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧

    风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧 XSS绕过-过滤-编码 核心思想 后台过滤了特殊字符,比如说

随机推荐

  1. GIT(1)----更新代码和上传代码操作的步骤

    1.第一次下载代码 a.首先获得下载的地址,可从服务器,或者GitHut上获得.例如http://100.211.1.110:21/test/test.git b.终端里切换到想要将代码存放的目录,在 ...

  2. Zookeeper Monitor集群监控开发

    随着线上越来越多的系统依赖Zookeeper集群.以至于Zookeeper集群的执行状况越来越重要.可是眼下还没有什么好用的Zookeeper集群监控系统(淘宝开源了一个Zookeeper监控系统,可 ...

  3. /dev/rdsk 与 /dev/dsk区别

    /dev/rdsk/c0t0d0s0 裸设备 /dev/dsk/c0t0d0s0 块设备 它们链接的是同一块物理设备,具体区别是在访问方式上. 裸设备是假设硬盘上没有文件系统时的访问方式. 裸设备是按 ...

  4. html圆形头像的制作

    <html> <head><title>圆形头像的制作</title> <style type="text/css">. ...

  5. nsstring 怎么包含”(引号)号

    使用转义字符 \ 即可.如下: [NSString *string = @"\"好\""]; NSLog("%@",string); 打印结 ...

  6. Java String和Date的转换 Date类型操作

    String—>Date String dateString = "2012-12-06 "; try { SimpleDateFormat sdf = new Simple ...

  7. 通过使用第三方开源jar包sigar.jar我们可以获得本地的信息

    1.下载sigar.jar sigar官方主页 sigar-1.6.4.zip 2.按照主页上的说明解压包后将相应的文件copy到java路径.比如windows32位操作系统需要将lib中sigar ...

  8. Java发邮件带附件(且重命名附件)

    环境:spring3.2.2+jquery 用户的附件管理要实现发送附件可以是单个也可以是多个.由于用户在上传附件的时候采用了重命名机制,所以存在服务器上的文件是重命名后的文件,如果用户要将文件以邮件 ...

  9. (原)用WebBrowser浏览Office Web Apps Server,除去“下载”按钮

    对,没错,如果你按关键字找到这篇随笔了,相信一定知道背景,以及我所说的是什么. 上一段子代码. private void timerHideButton_Tick(object sender, Eve ...

  10. html5-语义化标签(一)

    1.什么是语义化标签? 根据内容的结构化(内容化),选择合适标签 2.为什么要语义化 为了在没有css样式的情况下,页面也能很好的呈现出很好的内容结构.代码结构 方便其他设备的解析(屏幕阅读器.盲人阅 ...