目录
四、File类及方法 (封装了单个上传文件所包含的所有信息)
一、SmartUpload组件是什么?
专门用于实现文件上传及下载的免费组件
二、SmartUpload组件的特点
1)使用简单:编写少量代码,完成上传下载功能
2)能够控制上传内容
3)能够控制上传文件的大小、类型
4)缺点:目前已停止更新服务
三、环境准备
1)使用SmartUpload组件需要在项目中,将jspsmartupload.jar 添加到WEB-INF / lib目录下
2)导包
<%@taglib prefix="fc" uri="http://java.fckeditor.net"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
3)需要设置表单的enctype属性(表单必须以post方式提交)
引入SmartUpload:必写
<form action="需要跳转的页面.jsp" enctype="multipart/form-data" method="post"> <input type="file" name="myfile"><br> <input type="submit" value="开始上传"> </form>
getRequest():得到com.jspsmart.upload.Request对象
四、File类及方法 (封装了单个上传文件所包含的所有信息)
方法名称 | 说 明 |
saveAs(String destFilePathName) | 将文件保存,参数destFilePathName是保存的文件名 |
isMissing( ) | 判断用户是否选择了文件,即对应表单项是否为空,返回值为boolean类型 |
public String getFieldName( ) | 获取表单中当前上传文件所对应的表单项的名称 |
public String getFileName( ) | 获取上传文件的文件名称,不包含路径 |
五、Files类及方法 (封装了所有上传文件的信息集合)
属性名称 | 说 明 |
public int getCount() | 取得文件上传的数目 |
public File getFile(int index) | 取得指定位置的File文件对象 |
public long getSize() | 取得上传文件的总长度 |
public Collection getCollection() | 将所有上传文件对象以Collection的形式返回 |
六、SmartUpload类及方法
属性名称 | 说 明 |
public final void initialize(PageContext pageContext) | 执行上传和下载的初始化工作,必须实现 |
public void upload() | 实现文件数据的上传,在initialize方法后执行 |
public int save(String pathName) | 将全部上传文件保存到指定的目录下,并返回保存的文件个数 |
public void setAllowFilesList(String ExtList) | 指定允许上传的文件扩展名,接收一个扩展名列表,以逗号分隔 |
public void setDeniedFilesList( String fileList) | 指定了禁止上传的文件扩展名列表,每个扩展名之间以逗号分隔 |
public void setMaxFileSize(long filesize) | 设定每个文件允许上传的最大长度 |
public void setTotalMaxFileSIze(long totalfilesize) | 设定允许上传文件的总长度 |
七、代码
1、完整引入
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ 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>添加新闻--管理后台</title>
<link href="../CSS/admin.css" rel="stylesheet" type="text/css" />
</head>
<body>
<%
//判断用户是不是为空
Object obj = session.getAttribute("a");
if(obj==null){
out.print("<script>alert('你没有登录,请先登录');location.href='../login.jsp'</script>");
}
%>
<div id="header">
<div id="welcome">欢迎使用新闻管理系统!</div>
<div id="nav">
<div id="logo"><img src="../images/logo.jpg" alt="新闻中国" /></div>
<div id="a_b01"><img src="../images/a_b01.gif" alt="" /></div>
</div>
</div>
<div id="admin_bar">
<div id="status">管理员: <%=session.getAttribute("a") %>      <a href="login.jsp">login out</a></div>
<div id="channel"> </div>
</div>
<div id="main">
<div id="opt_list">
<ul>
<li><a href="add_news.jsp">添加新闻</a></li>
<li><a href="../admin.jsp">编辑新闻</a></li>
<li><a href="../admin.jsp">查找新闻</a></li>
<li><a href="add_sub.jsp">添加主题</a></li>
<li><a href="update_sub.jsp">编辑主题</a></li>
<li><a href="../dodele.jsp">删除主题</a></li>
</ul>
</div>
<div id="opt_area">
<h1 id="opt_type"> 添加新闻: </h1>
<form action="doadd_news.jsp" enctype="multipart/form-data" method="post">
<p>
<label> 主题 </label>
<select name="ntid">
<%
Class.forName("oracle.jdbc.driver.OracleDriver");
//2、连接数据库
String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
Connection con = DriverManager.getConnection(url, "scott", "tiger");
//3、定义那个对象,用来执行sql语句
PreparedStatement ps = con.prepareStatement("select * from subject");
ResultSet rs=ps.executeQuery();
while(rs.next()){
%>
<option value="<%=rs.getInt(1)%>"><%=rs.getString(2) %></option>
}
<% }%>
</select>
</p>
<p>
<label> 标题 </label>
<input name="ntitle" type="text" class="opt_input" />
</p>
<p>
<label> 作者 </label>
<input name="nauthor" type="text" class="opt_input" />
</p>
<p>
<label> 摘要 </label>
<textarea name="nsummary" cols="40" rows="3"></textarea>
</p>
<p>
<label> 内容 </label>
<textarea name="ncontent" cols="70" rows="10"></textarea>
</p>
<p>
<label> 上传图片 </label>
<input name="file" type="file" class="opt_input" />
</p>
<input name="action" type="hidden" value="addnews">
<input type="submit" value="提交" class="opt_sub" />
<input type="reset" value="重置" class="opt_sub" />
</form>
</div>
</div>
<div id="site_link"> <a href="#">关于我们</a><span>|</span> <a href="#">Aboue Us</a><span>|</span> <a href="#">联系我们</a><span>|</span> <a href="#">广告服务</a><span>|</span> <a href="#">供稿服务</a><span>|</span> <a href="#">法律声明</a><span>|</span> <a href="#">招聘信息</a><span>|</span> <a href="#">网站地图</a><span>|</span> <a href="#">留言反馈</a> </div>
<div id="footer">
<p class="">24小时客户服务热线:010-68988888      <a href="#">常见问题解答</a>      新闻热线:010-627488888<br />
文明办网文明上网举报电话:010-627488888      举报邮箱:<a href="#">jubao@jb-aptech.com.cn</a></p>
<p class="copyright">Copyright © 1999-2009 News China gov, All Right Reserver<br />
新闻中国 版权所有</p>
</div>
</body>
</html>
2、完整读取
<%@page import="com.jspsmart.upload.Request"%>
<%@page import="com.jspsmart.upload.SmartUpload"%>
<%@page import="com.jspsmart.upload.File"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
//创建SmartUpload对象
SmartUpload su = new SmartUpload();
//初始化
su.initialize(pageContext);
//声明一个File对象 用来接收上传的文件
File file = null;
//设置允许上传的文件类型
su.setAllowedFilesList("jpg,png,gif,jpeg");
//设置不允许上传的文件类型
su.setDeniedFilesList("bat,exe,mp4");
//设置单文件大小
su.setMaxFileSize(40000);
//设置总文件大小
su.setTotalMaxFileSize(50000);
//设置编码
su.setCharset("utf-8");
//开始上传
su.upload();
//获取文件集合中的第一个文件
file = su.getFiles().getFile(0);
String filePath = "";
if(!file.isMissing()){
//拼接文件上传到服务器的 路径
filePath ="onload/"+file.getFileName();
//上传到服务器 保存到指定路径
file.saveAs(filePath,SmartUpload.SAVE_VIRTUAL);
}
Request req = su.getRequest();
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//接受添加界面的数据
int tid=Integer.valueOf(req.getParameter("ntid"));
String ntitle=req.getParameter("ntitle");
String nzz=req.getParameter("nauthor");
String nzy=req.getParameter("nsummary");
String nnr=req.getParameter("ncontent");
Class.forName("oracle.jdbc.driver.OracleDriver");
//2、连接数据库
String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
Connection con = DriverManager.getConnection(url, "scott", "tiger");
//3、定义那个对象,用来执行sql语句
int nextNid=1;
PreparedStatement ps=con.prepareStatement("select max(nid) from news");
ResultSet rs=ps.executeQuery();
if(rs.next()){
nextNid=rs.getInt(1)+1;
}
ps=con.prepareStatement("insert into news values(?,?,?,?,?,sysdate,0,?,?)");
ps.setInt(1, nextNid);
ps.setInt(2, tid);
ps.setString(3, ntitle);
ps.setString(4, nzz);
ps.setString(5, nnr);
ps.setString(6, nzy);
ps.setString(7, filePath);
int i=ps.executeUpdate();
if(i>0){
out.print("<script>alert('添加成功');location.href='../admin.jsp'</script>");
}else{
out.print("<script>alert('添加失败');location.href='doadd_news.jsp'</script>");
}
%>
该处使用了SmartUpload对象,它会和request对象产生冲突,使request对象获取不到值,所以需要使用Request的req来获取数据
。在使用文本编辑器和SmartUpload文件上传都需要相对应的jar文件。
“三号路依然长得没有尽头
梧桐荫还是枝繁叶茂”